回滚最后一次“git pull upstream”(发生冲突)进入旧状态

时间:2015-07-21 19:39:07

标签: git

我确实更新了一个文件并提交了更改(efe5e5d (HEAD, master) change about caption),然后在最近更改了上游代码时解除了git pull upstream,这当然导致了冲突。

git show-ref

efe5e5d65603419288e40b8e964aecba4626c99f refs/heads/master
879020dbcd1cf1f797577b66a9416c1007a1ad29 refs/remotes/upstream/HEAD
20e54d8ccaa4dba7890fa5db2e89394ab33a0c81 refs/remotes/upstream/dev
879020dbcd1cf1f797577b66a9416c1007a1ad29 refs/remotes/upstream/master

冲突文件(index.html)

<<<<<<< HEAD
    <a href="about.html" class="btn btn-success">Goto About</a>
=======
    <a href="about.html" class="btn btn-success">About Page</a>
>>>>>>> 879020dbcd1cf1f797577b66a9416c1007a1ad29

git status

Your branch and 'upstream/master' have diverged,
and have 1 and 1 different commit each, respectively.
  (use "git pull" to merge the remote branch into yours)

You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:   index.html

git log

* efe5e5d f72465f (HEAD, master) change about caption     
* f72465f 28645ce add link button                         
* 28645ce 48c2640 20e54d8 Merge branch dev'                            

问题如何将此最后git pull upstream回滚到旧状态?

这样做的目的是学习,这不是真正的代码。我想我不能使用git reset,我认为以下内容是相关的。

  1. git update-ref refs/remotes/upstream/master refs/remotes/upstream/master@{1}
  2. git checkout -- index.html(我不确定,因为通常git状态会暗示这一点)
  3. 我应该如何处理refs/remotes/upstream/HEAD
  4. 请指导谢谢。

    被修改

    我想我找到了解决这个问题的方法。

    1. git merge --abort
    2. git update-ref refs/remotes/upstream/master refs/remotes/upstream/master@{1}
    3. 通过这两个命令,我可以再次触发git pull upstream,就像以前从未发生过一样。

1 个答案:

答案 0 :(得分:1)

在执行git pull时,您的跟踪分支会更新,并在远程分支和本地分支之间执行合并。如果发生冲突,合并将在两者之间停止,允许您解决它们,然后转到git commit。看看这个:

You have unmerged paths.
  (fix conflicts and run "git commit")

合并在git commit之后完成。因此,要返回分支在git pull upstream之前的状态,您必须进行硬重置,因为更改仍然未合并。

git reset --hard

它将删除所有分阶段的更改。要同时删除冲突的文件(未加载的文件),请执行以下操作。

git add index.html
git reset --hard