2015-10-15 192 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,如果你告诉它这样做吧。有多种方法可以使用拉格,这可能应该是默认设置。你可以撤消合并和重定义,但方法有点不同。