2017-07-12 89 views
0

這是一個經常被問到的「如何讓兩個git分支指向同一提交」的稍微不同的版本。如何讓兩個遠程git分支指向相同的提交?

我有兩個遠程 git分支叫做origin/A和origin/B。兩者都很遙遠,都被別人使用。通常起源/ B如下產地/ A落後,但可以很容易地快速通過轉趕上:

git checkout -t origin/B 
git merge origin/A 
git push 

在一段時間每隔一段時間,我們暫時提交獨特的原點/ B的東西。最終原點/ B的內容與原點/ A重新同步。然而,在發生這種情況之後,原點/ B的HEAD是與原點/ A不同的物理提交(即使內容是不同的),並且不能再被快速轉發到原點/ A.

什麼是乾淨的/正確的方式使原點/ B點返回原點/ A的HEAD在這一點上,以便將來的合併可以快速完成?我不特別關心分支機構的歷史。

我知道我可以通過rebase將其修復到本地分支上,或者我可以刪除遠程分支並重新創建它......但我認爲這些都傷害了遠程分支的其他用戶。

有沒有更好的方法?

+1

爲什麼專注於管理遠程分支,而不是本地分支? – Nayuki

+0

此問題最好通過合併或重新綁定其中一個分支直到它們與對方保持最新進行處理。 –

+0

我們使用分支來控制發佈。我認爲rebase可以解決一個本地分支的問題,但是文檔暗示如果我推送它,它會對已經檢出遠程分支的其他用戶做一些壞事。除非我誤解了這麼做的嚴重性? – DanJ

回答

1
git push origin --force origin/A:B 

這將設置origin/B是相同的承諾爲origin/A

注意,這是一個推和基於關閉的origin/B將包含在origin/A分支不復存在提交任何分支機構。

+0

啊,這看起來像我想要的。一個問題:在這之後,其他用戶在「git pull」時會發生什麼?它會將它們從舊分支上的位置乾淨地拉到新的起源/ A頭部嗎? – DanJ

+0

這之後從'origin/B'拉出將與從'origin/A'拉出相同(因爲它們指的是相同的提交)。請注意,'git pull $ branch'基本上只是'git fetch && git merge $ branch' –

+0

好吧,所以我嘗試了這個,它給了我這個錯誤。我是最新的,'git pull'沒有幫助:git push origin - 強制原點/ A:B 合計0(delta 0),重用0(delta 0) remote:錯誤:拒絕非-fast-forward refs/heads/B(你應該先拉) 寄主:/ git/repo ! [remote rejected] origin/A - > B(non-fast-forward) 錯誤:無法將某些文件推送到'host:/ git/repo' – DanJ

相關問題