Git pull origin创建了一个问题

时间:2012-12-04 00:23:44

标签: git github repository git-svn

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”的结果是公司每个人的状态。

请帮帮我。感谢

3 个答案:

答案 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