2015-10-15 34 views
-2

首先,我試圖撤消拉(不要問我爲什麼),由我origin/develop分支移動到特定的承諾:如何修復有兩個同名原始分支的git?

git reset --hard <older-commit> 
# trying to undo the pull (please don't ask why) 
git branch -f origin/develop HEAD 

貌似混帳創建新的本地分支稱爲origin/develop

git log -n 3 --decorate remotes/origin/develop 

commit 43187d461a5e2b3a4a3443ac7d91d2414f6ccdd7 (origin/develop) 
Author: me <[email protected]> 
Date: Tue Oct 13 17:10:29 2015 -0700 

    Commit 3 

commit 33187d461a5e2b3a4a3443ac7d91d2414f6ccdd6 
Author: me <[email protected]> 
Date: Tue Oct 13 17:01:29 2015 -0700 

    Commit 2 

commit 23187d461a5e2b3a4a3443ac7d91d2414f6ccdd5 (HEAD, develop, origin/develop) 
Author: me <[email protected]> 
Date: Tue Oct 13 17:00:29 2015 -0700 

    Commit 1 

兩個問題:

  1. 你能解釋一下爲什麼會發生?
  2. 我該如何解決這個問題,而不會進一步搞亂事情?
+0

當你在git命令上使用'-f'(強制)選項時,你可能會冒險將存儲庫置於無效狀態,這似乎已經發生了。將43187d46克隆到新目錄中,然後重試。 – msw

回答

2

是的,您創建了一個名爲origin/develop的本地分支。這就是git branch命令做了什麼:你問它來創建或替換的存在(-f)本地分支origin/develop這樣,這個特殊的分支指向同一個commit爲HEAD

git branch -f origin/develop HEAD 

這種「作品「(對於」作品「的某些價值),因爲所有本地分店實際上都以隱藏的refs/heads/開頭:您創建的refs/heads/origin/develop。所有的遠程追蹤分支實際上都是以隱藏的refs/remotes/開頭,然後將遠程名稱(origin)加上另一個git存儲庫正在使用的名稱(develop)和通常的路徑名稱分隔符/。所以你的本地origin/develop實際上是refs/heads/origin/develop,它與refs/remotes/origin/develop足夠不同,git可以區分它們。但是當git縮短你的名字時,產生的短名是origin/developorigin/develop

解決方法是刪除(或重命名)您當地的分行,以便它不是那麼混亂:

git branch -d origin/develop 

同時,事情瞭解git pull的是,它實際上git fetch其次是git merge。 您不應該撤銷git fetch部分,它可能是您想要撤消的部分git merge


或者git fetch其次是git rebase,如果你告訴它這樣做吧。有多種方法可以使用拉格,這可能應該是默認設置。你可以撤消合併和重定義,但方法有點不同。

相關問題