2017-12-27 410 views
0

我目前在AWS代碼提交中有一個masterfeatures分支。我需要爲該項目創建更多分支機構。Git分支刪除[AWS代碼提交]

假設我將創建新的ui-improvement分支,幾天後,我在本地和遠程刪除分支。之後,是否可以在使用ui-improvement之前創建相同的分支名稱?

回答

3

雖然git不關心你是否重用分支名稱,但在實踐中它不是沒有潛在的後果。 tl; dr:只是因爲您從您的中刪除了本地和遠程,並不意味着它已從每個回購中消失。

爲什麼你可以做到這一點: git分支是ref。也就是說,它是指向提交的指針的名稱。如果你刪除了一個ref,git並沒有試圖跟蹤之前使用過這個特定名字的事實。 (其實即使對於分支reflog就會被丟棄,這可能有像樣的理由,但在某種程度上是不幸)

爲什麼你可能不應該:在裁判,有什麼特別的分支是他們預期移動,並有一個默認規則他們預計如何移動。 (這是相對於像標籤裁判,這只是預期通常不移動

具體來說,分支預計,在創建新的提交到由父母轉移到孩子。如果在兩個不同時刻都存在一個具有給定名稱的分支,則預計它在較早時刻指向的提交是「可到達的」(通過父指針),它指向稍後的提交。

現在,如果您已經刪除了分支的所有痕跡(從本地和遠程刪除),那麼重新使用分支名稱似乎足夠安全。但是既然你有一個遙控器 - 或者說那個問題,因爲你使用的是分佈式版本控制系統 - 我們至少應該考慮到你的遙控器不是唯一的克隆。

假設你開始你的項目。

A -- B -- C <--(master) 

,你創建一個分支

A -- B -- C <--(master) 
     \ 
     D -- E <--(fixes) 

和你推到這個原點,另一個開發者已經退出了這一切到本地。因此,他們有

A -- B -- C <--(master)(origin/master) 
     \ 
     D -- E <--(fixes)(origin/fixes) 

現在你繼續工作,很快就會有

   H -- I <--(a_branch) 
      /
A -- B -- C ------------ M<--(master) 
     \    /
     D -- E -- F -- G <--(fixes) 

,到目前爲止,這一切都很好,因爲每個部門只向前移動。另一個開發人員拉動並且是最新的。

   H -- I <--(a_branch)(origin/a_branch) 
      /
A -- B -- C ------------ M<--(master)(origin/master) 
     \    /
     D -- E -- F -- G <--(fixes)(origin/fixes) 

但現在你刪除fixes,因爲它合併。然後a_branch出現了,所以你決定你需要一個新的fixes分支。

    K <--(fixes) 
       /
      H -- I <--(a_branch) 
      /
A -- B -- C ------------ M<--(master) 
     \    /
     D -- E -- F -- G 

所以其他開發做了取現擁有

    K <--(origin/fixes) 
       /
      H -- I <--(a_branch)(origin/a_branch) 
      /
A -- B -- C ------------ M <--(master)(origin_master) 
     \    /
     D -- E -- F -- G <--(fixes) 

而且現在從他們的觀點回購的角度來看,似乎fixes分支以意想不到的方式移動。這並不難解決,但是他們得到的錯誤中最「顯而易見」的方式是錯誤的,並且會導致奇怪的結果。這很煩人,你的工作流程不應該經常創建這個條件。

1

是的,可以在新分支中使用同一分支名稱(已刪除分支的名稱 - 本地和遠程刪除)。

一旦分支被清除,即使您之前在合併中使用了已清除的分支,也不會有名稱衝突。

+0

謝謝萊昂納多! – aliyasar

+0

不客氣。我很高興能夠提供幫助。如果它解決了你的問題,你可以接受答案:) –