Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从无关的项目中撤消git pull?_Git_Git Pull - Fatal编程技术网

如何从无关的项目中撤消git pull?

如何从无关的项目中撤消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 ~

我只是做了些傻事。在我的fooclient项目中,我刚刚做了:

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的一个众所周知的特性。