如果有两个同名的原始分支,如何修复git?

时间:2015-10-15 00:22:38

标签: git version-control git-branch branching-and-merging

首先,我尝试通过将origin/develop分支移动到特定提交来撤消拉(不要问我原因):

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

看起来git创建了一个名为origin/develop的新本地分支:

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

commit 43187d461a5e2b3a4a3443ac7d91d2414f6ccdd7 (origin/develop)
Author: me <me@me.com>
Date:   Tue Oct 13 17:10:29 2015 -0700

    Commit 3

commit 33187d461a5e2b3a4a3443ac7d91d2414f6ccdd6
Author: me <me@me.com>
Date:   Tue Oct 13 17:01:29 2015 -0700

    Commit 2

commit 23187d461a5e2b3a4a3443ac7d91d2414f6ccdd5 (HEAD, develop, origin/develop)
Author: me <me@me.com>
Date:   Tue Oct 13 17:00:29 2015 -0700

    Commit 1

两个问题:

  1. 你能解释一下为什么会这样吗?
  2. 如何在不进一步搞乱的情况下解决这个问题?

1 个答案:

答案 0 :(得分:2)

是的,您创建了一个名为origin/develop的本地分支。这就是git branch命令的作用:您要求它创建或替换现有的(-f)本地分支origin/develop,以便此特定分支指向与{{1}相同的提交}}:

HEAD

这“工作”(对于“作品”的某些值),因为所有本地分支实际上都以隐藏的git branch -f origin/develop HEAD 开头:您创建了refs/heads/。所有远程跟踪分支实际上都以隐藏的refs/heads/origin/develop开头,然后具有远程(refs/remotes/)的名称,后跟其他git存储库使用的名称(origin)与通常路径名分隔符develop。因此,您的本地/实际上是origin/develop,这与 git 可以区分开来的refs/heads/origin/develop完全不同。但是当git为你缩短名称时,生成的短名称为refs/remotes/origin/developorigin/develop

修复方法是删除(或重命名)您的本地分支,这样就不会让人感到困惑:

origin/develop

与此同时,要了解git branch -d origin/develop 的事实是git pull后跟git fetch 1 您永远不需要撤消{{1}部分,它是您可能想要撤消的git merge部分。

1 git fetch后跟git merge,如果您告诉它这样做。有多种方法可以使用pullase,这可能应该是默认值。您可以撤消合并和rebase,但方法有点不同。