首先,我尝试通过将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
两个问题:
答案 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/develop
和origin/develop
。
修复方法是删除(或重命名)您的本地分支,这样就不会让人感到困惑:
origin/develop
与此同时,要了解git branch -d origin/develop
的事实是git pull
后跟git fetch
。 1 您永远不需要撤消{{1}部分,它是您可能想要撤消的git merge
部分。
1 或git fetch
后跟git merge
,如果您告诉它这样做。有多种方法可以使用pullase,这可能应该是默认值。您可以撤消合并和rebase,但方法有点不同。