git newbie in here。
我在当地的回购中有2个分支a和b。 所以,如果我这样做
git branch
*a
b
然后错误地我做了“git pull origin”并且它拉了一堆文件并且把我的工作环境搞砸了分支a。
我想恢复原状。我想撤消“git pull origin” - 我该怎么办?
我试过“git pull origin a”但是它给了我数百个要合并的文件,它在一大堆文件后给出了以下消息:
由于您有未合并的文件,因此无法进行拉取。 请在工作树中修复它们,然后使用'git add / rm' 适用于标记解决方案,或使用'git commit -a'。
我尝试了“git reset --hard”但这并没有带来我想要处理的文件。我该怎么做才能解决这个问题?
可能有帮助的一条信息:在执行“git pull origin”之前,对“git log”的响应只是我团队的提交(仅在该分支上工作)但现在我做了“git pull origin”之后“git log”的结果是公司每个人的状态。
请帮帮我。感谢
答案 0 :(得分:3)
除非您已将pull配置为在远程更改的基础上对本地更改进行rebase,否则使用pull将使用来自远程的提交合并您的更改。只要您还没有进行任何进一步的提交,就会使HEAD
ref指向由pull操作创建的合并提交。该提交将有两个父项,即在合并之前是您的状态的提交,以及在合并之前是远程分支的状态的提交。这些可以分别用名称HEAD^
和HEAD^2
来引用。
您可以使用以下方式返回当地状态:
git reset --hard HEAD^
这会消除您对跟踪文件所做的任何未提交的更改,如果有类似的内容,您可以使用git stash
保存它们。
在执行重置之前运行git branch savepoint
以保存当前状态以防重置使事情变得更糟,这也是一个好主意。
答案 1 :(得分:2)
这是the reflog的完美用例。 reflog存储了您的头部和分支头部过去的历史记录。运行git reflog
,你会看到。在您的情况下,正确的命令可能是git reflog a
。这将显示您a
分支的过去状态。找到正确的行,然后执行git reset
。
如果您刚刚完成拉动而没有做任何其他操作,则命令为git reset --hard a@{1}
。这意味着“将当前当前分支恢复到a
之前的一个变化状态”。如果你做了更多更改,你可能需要更进一步(例如git reset --hard a@{4}
。
这比HEAD^^^^^…
更方便,更可控。
答案 2 :(得分:-1)
尝试重新设置waaaaay和拉分支
git reset --hard HEAD^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(如果你需要返回更多提交,请添加更多^)
然后拉
git pull origin a