我目前在AWS代碼提交中有一個master
和features
分支。我需要爲該項目創建更多分支機構。Git分支刪除[AWS代碼提交]
假設我將創建新的ui-improvement
分支,幾天後,我在本地和遠程刪除分支。之後,是否可以在使用ui-improvement
之前創建相同的分支名稱?
我目前在AWS代碼提交中有一個master
和features
分支。我需要爲該項目創建更多分支機構。Git分支刪除[AWS代碼提交]
假設我將創建新的ui-improvement
分支,幾天後,我在本地和遠程刪除分支。之後,是否可以在使用ui-improvement
之前創建相同的分支名稱?
雖然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
分支以意想不到的方式移動。這並不難解決,但是他們得到的錯誤中最「顯而易見」的方式是錯誤的,並且會導致奇怪的結果。這很煩人,你的工作流程不應該經常創建這個條件。
是的,可以在新分支中使用同一分支名稱(已刪除分支的名稱 - 本地和遠程刪除)。
一旦分支被清除,即使您之前在合併中使用了已清除的分支,也不會有名稱衝突。
謝謝萊昂納多! – aliyasar
不客氣。我很高興能夠提供幫助。如果它解決了你的問題,你可以接受答案:) –