1. 程式人生 > >由git push -f引發的程式設計師槍擊血案

由git push -f引發的程式設計師槍擊血案

從程式設計師槍殺案談git push -f

前段時間看到的訊息:

程式設計師不老老實實的當鍵盤俠,搞起自己的同事?

目前,碼農持槍殺人的動機仍然是個謎。有人猜測道:“同事不寫註釋,不遵循駝峰命名,括號換行,最主要還天天git push –f等因素”激怒了這名行凶者。

看到上面的原因,感覺太假了,“天天git push –f”,開什麼玩笑,第一天這麼幹就被打斷腿了好不好?


Git 遠端倉庫簡介

Git是分散式版本控制系統,同一個Git倉庫,可以分佈到不同的機器上。

在這類系統中,客戶端並不只提取最新版本的檔案快照,而是把程式碼倉庫完整地映象下來。這麼一來,任何一處協同工作用的伺服器發生故障,事後都可以用任何一個映象出來的本地倉庫恢復。因為每一次的提取操作,實際上都是一次對程式碼倉庫的完整備份。 

Git Push

所以不可避免的遠端倉庫和本地倉庫,git 常用命令流程圖如下: 

git push命令用於將本地分支的更新,推送到遠端主機。

$ git push <遠端主機名> <本地分支名>:<遠端分支名>

如果省略遠端分支名,則表示將本地分支推送與之存在”追蹤關係”的遠端分支(通常兩者同名),如果該遠端分支不存在,則會被新建。

$ git push origin master

上面命令表示,將本地的master分支推送到origin主機的master分支。如果後者不存在,則會被新建。

Git Push -f

如果遠端主機的版本比本地版本更新,推送時Git會報錯,要求先在本地做git pull合併差異,然後再推送到遠端主機。這是正常合理的程式碼提交流程。 這時,如果你一定要推送,可以使用--force選項。

$ git push --force origin 

上面命令使用--force選項,結果導致遠端主機上更新的版本被覆蓋。同事之前推送的程式碼會被你抹掉,他可能剛剛提交了一整個功能模組的程式碼,也許是一週的工作量。如果大家都不小心更新你的版本,OMG,前功盡棄。 除非你很確定要這樣做,否則應該儘量避免使用--force

選項。

怎麼樣避免使用 –force 選項?

1,只給自己用,要坑就坑自己。

我自己在工作的時候,通常會開一個分支出去做,但做完發現Commit 太過瑣碎,便會想使用Rebase 來整理一下這個分支。雖然Rebase 是修改歷史沒錯,但因為這個歷史影響的範圍只有我自己這個分支,所以並不會影響其它人正常使用:

$ git push -f origin features/my_branch

這樣只會強制更新features/my_branch這個分支的內容,不會影響其它分支。

2,設定保護機制

但總是有人可能不小心使用了-f引數來Push,GitHub網站有提供保護機制,可以避免某個分支被Force Push。請到倉庫的「Settings」頁籤,左邊選擇「Branches」,新增保護的規則;

同樣,碼雲gitee.com等有也有樣的設定(不過要付費企業專案);

 

 

 

內容部分參考"碼中人":http://www.mzh.ren/git-push-force.html

侵權刪;