如何从无关的项目中撤消git pull?
我只是做了些傻事。在我的fooclient项目中,我刚刚做了:如何从无关的项目中撤消git pull?,git,git-pull,Git,Git Pull,我只是做了些傻事。在我的fooclient项目中,我刚刚做了: git remote add official https://github.com/fooserver git pull official master 换句话说,我将一个完全不同的代码库(服务器,而不是客户端)拉入我的工作目录。毫不奇怪,合并冲突并不多(毕竟文件名完全不同)。同样毫不奇怪,Git完全没有警告我回购协议没有一个共同的祖先 在这种特殊情况下,我可以通过这样做来恢复: cp file-i-worked-on.js ~
git remote add official https://github.com/fooserver
git pull official master
换句话说,我将一个完全不同的代码库(服务器,而不是客户端)拉入我的工作目录。毫不奇怪,合并冲突并不多(毕竟文件名完全不同)。同样毫不奇怪,Git完全没有警告我回购协议没有一个共同的祖先
在这种特殊情况下,我可以通过这样做来恢复:
cp file-i-worked-on.js ~
git reset --hard HEAD # to discard broken merge conflicts
git checkout a12345 # where a12345 is the latest head of fooclient that I had checked out
cp ~/file-i-worked-on.js .
但是更一般的策略是什么呢?在移除不需要的遥控器(
git remote rm…
)后,只需git重置--硬地
到您希望当前分支机构所在的位置
git reset --hard origin/master
如果您以前在
master
上,这会将您的master
重置为与原始遥控器的master相同的位置。就这样 这会将您重置为主机处于的最后一个状态:
git stash
git reset --hard HEAD^
git stash apply
git reset --hard HEAD@{1}
这是可能的,因为这是一个复杂的问题。运行git reflog
将向您显示reflog,并允许您验证您正在重置到正确的状态。从现在开始
git fetch
检查您在gitk或git日志或其他任何内容中得到的内容。现在,合并或重新设置您所得到的内容的基础到您想要的位置。git不也会隐藏半合并的文件吗?@SteveBennett:是的,您是对的,我没有读到关于合并冲突仍然存在的部分。只想注意,这假设您没有任何未推送的本地提交。您是说您从未使用git pull吗?正确。我以前是。我再也不会了。啊,这听起来是正确的答案。所以HEAD@{…}允许您跟踪HEAD指向的内容的更改。因此,你的命令被翻译成“你知道在我们把事情搞砸之前海德指的是什么吗?让我们回到那里…”-听起来是一个非常有用的工具。@SteveBennett是的!它非常有用,因为它使撤销意外命令比试图回溯您所做的事情容易得多。遗憾的是,这并不是Git的一个众所周知的特性。