重命名本地和遠程Git存儲庫的master分支

我有分支master追蹤遠程分支origin/mastergit

我想將它們重命名爲本地和遠程master-old 。 那可能嗎? 對於跟蹤origin/master (而且老是經過git pull更新其本地master git pull )的其餘用戶,重命名遠程分支後會發生什麼? 他們的git pull仍然能夠工做仍是會拋出錯誤,致使找不到origin/master了? bash

而後,進一步,我想建立一個新的master分支(本地和遠程)。 一樣,在我完成此操做以後,若是其餘用戶執行git pull會發生什麼呢? 服務器

我想全部這些都會帶來不少麻煩。 有沒有一種乾淨的方法來獲得我想要的東西? 仍是我應該只保留master並建立一個新的master-new分支,而後繼續工做? ide


#1樓

我假設您仍在詢問與上一個問題相同的狀況。 也就是說,「 master-new」將在其歷史記錄中不包含「 master-old」。*若是您將master-new稱爲「 master」,則將有效地重寫了歷史記錄。 沒關係,你如何進入,其中主不主的前面位置的後裔,只是它是在該州的狀態。 this

其餘嘗試在主服務器不存在的狀況下進行拉取的用戶只會使其拉取失敗(在遠程上沒有此類引用),一旦再次存在於新位置,他們的拉取將不得不嘗試將其主服務器與新的遠程主服務器合併,就像您在存儲庫中合併了master-new和master-new同樣。 鑑於您要在此處執行的操做,合併將產生衝突。 (若是解決了這些問題,而且將結果推回到了存儲庫中,那麼您將處於更加糟糕的狀態-那裏的兩個版本的歷史記錄。) spa

簡單地回答您的問題:您應該接受的是,您的歷史記錄有時會出現錯誤。 不要緊 它發生在每一個人身上。 git.git存儲庫中有還原的提交。 重要的是,一旦咱們發佈了歷史,每一個人均可以信任它。 code

*若是這樣作的話,這等效於將一些更改推送到master上,而後在之前的位置建立一個新分支。 沒問題。 rem


#2樓

與重命名最接近的是刪除,而後在遠程上從新建立。 例如: get

git branch -m master master-old
git push remote :master         # delete master
git push remote master-old      # create master-old on remote

git checkout -b master some-ref # create a new local master
git push remote master          # create master on remote

可是,這有不少警告。 首先,沒有現成的檢出會了解重命名- Git 並不試圖跟蹤分支重命名。 若是新的master服務器不存在,則git pull將出錯。 是否建立了新的master 。 拉將嘗試合併mastermaster-old 。 所以,除非您與先前簽出了存儲庫的全部人進行合做,不然一般這是一個壞主意。 it

注意:默認狀況下,較新版本的git不容許您遠程刪除master分支。 您能夠經過將receive.denyDeleteCurrent配置值設置爲warnignore 遠程存儲庫來覆蓋此設置。 不然,若是您準備當即建立新的master,則跳過git push remote :master步驟,並將--force傳遞給git push remote master步驟。 請注意,若是您沒法更改遙控器的配置,則將沒法徹底刪除master分支!

此警告僅適用於當前分支(一般是master分支); 能夠如上所述刪除和從新建立任何其餘分支。


#3樓

對於Git v1.7,我認爲這已經發生了一些變化。 如今,將本地分支機構的跟蹤參考更新爲新的遙控器很是容易。

git branch -m old_branch new_branch         # Rename branch locally    
git push origin :old_branch                 # Delete the old branch    
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

#4樓

重命名分支有不少方法,但我將着重解決更大的問題: 「如何讓客戶快速前進,而沒必要在本地弄亂分支」

首先快速看一下: 重命名主分支並容許客戶快速前進

這實際上很容易作到; 但不要濫用它。 整個想法取決於合併提交。 由於它們容許快速前進,而且將分支的歷史連接到另外一個。

重命名分支:

# rename the branch "master" to "master-old"
# this works even if you are on branch "master"
git branch -m master master-old

建立新的「 master」分支:

# create master from new starting point
git branch master <new-master-start-point>

建立合併提交以具備父子歷史記錄:

# now we've got to fix the new branch...
git checkout master

# ... by doing a merge commit that obsoletes
# "master-old" hence the "ours" strategy.
git merge -s ours master-old

和瞧。

git push origin master

之因此可行,是由於建立merge提交容許將分支快速轉發到新修訂版。

使用明智的合併提交消息:

renamed branch "master" to "master-old" and use commit ba2f9cc as new "master"
-- this is done by doing a merge commit with "ours" strategy which obsoletes
   the branch.

these are the steps I did:

git branch -m master master-old
git branch master ba2f9cc
git checkout master
git merge -s ours master-old

#5樓

git update-ref newref oldref
git update-ref -d oldref newref
相關文章
相關標籤/搜索