2010-08-02 78 views
64

我不想82 feature branches hanging around結束了,所以我想知道什麼是潛在的缺點是簡單的,只要我把它合併到主刪除特性分支。何時適合刪除git功能分支?

工作流程:

git co -b feat-xyz 
hack hack 
git ci 
hack some more 
git ci 
git co master 
git merge feat-xyz 
smoke test 
git br -d feat-xyz 

任何問題嗎?

+1

我會說沒有問題,因爲如果你真的需要它們以後可以隨時復活刪除分支。 – slebetman 2010-08-02 23:09:49

+0

@slebetman據我所知,被刪除的分支不能復活。 但是,如果分支在刪除之前完全合併到主分區中,則不再需要該分支。 – Simeon 2017-04-18 10:25:20

+1

@Simeon是的,你可以。 Git從不刪除提交,所以當你刪除你的分支時,你只是刪除它的名字。要復活已刪除的分支,您只需記住您提交給該分支的最後一件事,並且可以搜索'git reflog'。然後結賬散列 – slebetman 2017-04-18 15:13:42

回答

47

合併後刪除是通常的方式。這就是爲什麼git branch -d檢查以確保分支在刪除之前完全合併的原因。

有幾個原因可以讓我想到分支:你可能想要堅持下去,以防一旦有bug返回生產,或者你可能需要一個歷史記錄。

在這兩種情況下,你必須標記分支的頭部刪除之前的選項。標籤就像一個分支,它是一個指向提交的指針,除了一些細微差別:1)瓷器通常不會在探索性命令中顯示標籤,例如git show-branch或tab-auto在結帳時完成,2)檢查一個出你把你放在一個分離(非參考)頭3)你可以留下一個「tagging message」,這導致標籤被保存爲對象存儲中的對象,如提交。

這樣你保存的歷史,如果你確實需要bug修復,我建議只創建一個新的分支關老爺的修復。

+1

檢查標籤出不會設置HEAD,但不會自動創建分支。沒有分支的提交上的頭是什麼使它分離。 – Binarian 2017-07-16 11:41:10

+1

你說得對,它將HEAD設置爲一個提交ID而不是參考。我的OP的那部分是不正確的。我應該更新它。 – masonk 2017-07-16 12:29:19

1

我認爲這是(合併後刪除)

編輯 因此,而不是合併,至少在短暫的分支機構的典型工作流程,我認爲這個想法是衍合他們的主人。那麼你最終會得到一個線性變化歷史,並且整個分支變成主幹的一部分。在這種情況下,你有所有的變化,所以你顯然不需要副本。

+0

所以,保持分支真的沒有意義,對吧? – bstpierre 2010-08-02 23:06:55

+1

我強烈建議避免「rebase」。重新啓動通常是有害的,只在某些情況下才有用。 – 2010-08-03 01:16:10

+9

重整是一個完美合理的工作流程,爲您的本地,私人分支機構。通過重新綁定實例(「rebasing * down *」)來保持與上游工作同步是非常常見的。這種情況通常很不常見,並且通常是有害的,因此無法重新分配*。 第二個答案沒有意義,因爲無論您是在上游變更中重新組合還是合併,您都必須以某種方式將這些內容「推」出來。即使在您的本地分支上,您也必須在某些時候將您的功能合併到主控中。保持基於你的特性的優點是這種合併變得快速。 – masonk 2010-08-03 04:05:23

4

我能想到的兩個原因,你可能要圍繞保持一個特性分支了一點:

  • 有機會的話,將通過上游被踢回給你更多的工作。
  • 其他開發人員可能希望使用該功能,而不需要主人的所有其他功能。

在實踐中,大部分的時間合併之後刪除就好了。

74

我合併後刪除,但我總是做一個git merge --no-ff,以避免快速轉發,這樣分支歷史圖表上可見。我喜歡的特性分支從開發分支離開那裏的歷史和它加入了回來:

Merging with or without fast-forwards

這是從A successful Git branching model採取文森特Driessen的,一個非常漂亮的工作流程的Git使用哪個我申請我的大部分項目。

+0

這是保存歷史的另一種不錯方式,因爲您可以選擇可從功能但不能從主設備訪問的提交:rev^1..rev^2。不利的一面是,它會阻止你想要從主分支中完成的任何重新分配(例如,如果你想讓主重新分配到上游遠程分支,這很常見)。 – masonk 2010-08-03 12:27:03

+1

我沒有這個問題。我們的團隊通過github進行同步,而且我通常不需要重新綁定,但我認爲這不是一個缺點。即使您將開發和功能分支重新綁定,分支仍保持可見,並且重要的是功能分支相對於開發的內容,而不是創建該分支時最初離開的提交。 – lkraider 2010-08-03 21:27:32

+0

@Ikraider,謝謝你的提醒。當我第一次學習git時,我看到了那篇文章,現在對我來說更有意義。我重新綁定了我的功能分支,但是我把'--no-ff'合併回主,因爲就像你說的那樣,你可以看到歷史。 – bstpierre 2010-08-04 04:19:32

3

典型的工作流程將

// Create new branch 
$ git checkout -b myfeature 
// and then do some changes and commit them 

// Switch to master branch 
$ git checkout master 

// Merge myfeature to master. --no-ff will always keep branch information. 
$ git merge --no-ff myfeature 

// Delete myfeature branch 
$ git branch -d myfeature 

// Push the changes 
$ git push origin master