2014-02-22 147 views
3

我正在從Subversion切換到Git,並且我試圖更好地理解如何管理分支。在刪除分支後識別Git中的提交分支

說我的軟件中存在一個錯誤,在我的錯誤跟蹤系統中記錄爲問題123。我可以在git中創建一個新分支來修復名爲「issue123」的bug。我進行了一些修改以修復該錯誤,並將其合併回主開發分支。

在這一點上聽起來像我應該刪除分支。與修復相關的提交將保留在存儲庫中,因爲問題123已解決,我不再需要指向分支的指針。

所以我的問題是,如果我合併後刪除分支有什麼辦法後來找到我在哪裏解決問題123?或者,我的合併提交消息應該是「合併問題123修復」之類的東西?

回答

0

一旦你將側枝「bug123」合併到 - 讓我們說「Main」,合併本身就是一個叫做「Merge branch bug123」的提交。你不需要命名它。 合併提交將包含您爲修復「bug123」所做的所有更改。

0

如果您想查看特定分支的特定歷史記錄,那麼您可以在重新合併時選擇非快進合併。這樣,主開發分支中的其他工作將不會混合在一起與歷史。

git merge --no-ff 

另一種方法是在將特徵分支合併到主開發分支之前壓縮到單個提交。這具有允許快速合併並且仍然保持特徵分支的變化不同於其他開發工作的優點。缺點是您從功能分支中遺失了歷史記錄。

git merge --squash 

在這兩種情況下,你可以強制的git總是創建一個合併提交,並留下一個合理的提交信息有關合並和它涉及到的問題。

git merge --commit 

我建議創建一些本地分支機構並使用所有選項來查看它們如何影響您的存儲庫。

0

合併自動填入消息,如「合併分支」功能「分支開發」。我總是保持這些消息不變,所以我可以看到合併的分支曾經被調用過。這是這些信息唯一保留的地方。如果刪除這些合併消息和分支,就是這樣。你無法弄清楚再一次是什麼。

我會爲某個功能簽出一個新的分支,在其上工作,然後切換回我分支的任何分支 - 通常是主人,但不總是 - 然後git merge --no-ff <feature branch>。這裏有一些例子,從一個項目中,我一直在操縱一個角色動畫承諾:

* c117bff Make squash joint scaling uniform 
* 9eb9ac2 Fix eyelid control limit 
* b50c967 Merge branch 'lipWeightImprovements' 
|\ 
| * 6f98ea7 Smooth cheek weighting 
| * fdf3f91 Improve lip weights 
|/ 
* 4434223 Merge branch 'hair' 
|\ 
| * a3f3f89 Add hair controls for front half of head 
| * 22a6bf4 Add joints for and weight front hair pieces 
|/ 
* c338c14 Move archived script into archive/scripted folder 

注意兩個合併分支 - 每一個說「合併分支‘什麼’」。這是主分支的一個獨特方面,我並不是那麼喜歡。如果您合併到主設備,它不會將主設備放在合併消息中。如果我已經合併到了「發佈」分支,它會在這些消息中添加「釋放」。即使我稍後刪除了分支頭,合併消息告訴我那些分支曾經被調用過。

這裏有注意兩件事情:生產

  1. 這個圖表是用git log --all --decorate --graph --oneline(這些標誌可以以任意順序)。這組4個標誌非常常見,大多數人都會將它們別名,並且我已經看到了各種別名。我使用la作爲'全部列出​​',而這只是4個標誌。我還有laslass用於'短'和'超短'版本, -10-25標誌,這是我工作的每臺機器的不同數字。我喜歡las顯示一半的屏幕價值的物品,lass顯示略低於四分之一的價值。我也有lb - '列表分支' - 這些的版本,這只是離開-all標誌,所以它只列出我所在分支的歷史。
  2. 當您進行提交時,會移至此圖的左上角。直接在左側的提交線將成爲'第一個父',這意味着通過當前分支的歷史合併的提交。總是合併的所有分支從左邊進來。 Git甚至會通過其他行向右劃一條線,以便在某些情況下可以環繞左側,所以分支合併總是從右側進入,併合併到左側。通過這種方式,你總能找出你的歷史中發生了什麼。

如果你想要我的LA /磅的別名,只需要運行這些命令:

git config --global alias.la 'log --oneline --graph --all --decorate' 
git config --global alias.las 'log --oneline --graph --all --decorate -20' 
git config --global alias.lass 'log --oneline --graph --all --decorate -8' 
git config --global alias.lb 'log --oneline --graph --decorate' 
git config --global alias.lbs 'log --oneline --graph --decorate -20' 
git config --global alias.lbss 'log --oneline --graph --decorate -8' 

那將其設置爲所有回購(通過你的〜/的.gitconfig文件)。調整數字來品嚐。

0

您不必刪除該分支,但它是一個很好的做法確實歸檔和反雜波:

$ git tag archive/branch branch 
$ git branch -d branch 

How can I archive git branches?

當你標記的分支,刪除它,你仍然可以通過標籤查找,但它不會顯示在分支列表中。

所以我的問題是,如果我合併後刪除分支有什麼辦法後來找到我的問題123?或者,我的合併提交消息應該是「合併問題123修復」之類的東西?

您絕對應該使用有意義的合併消息,例如, 「將fix_123合併到master中」是否刪除分支fix_123。

當你有一個命名修復,開發,登臺等分支的好方法時,合併信息是自描述的,因爲默認情況下使用分支名稱。

並回答你的第一個問題,如果你在刪除它之前標記了分支,你可以通過標籤找到你解決問題的地方。