pull而不是fetch - 意外地将远程master合并到本地分支

时间:2014-03-27 18:39:03

标签: git

我刚刚git pull代替git fetch。我当地的一个分支机构,我不想与origin/master合并。而且,我有一些未经改变的变化。

现在,我的暂存区域充满了来自origin/master的更改我希望还原,但如果我取消它们,它们将与我未经分级的未更改的更改混合。

我该如何解决这种情况?

4 个答案:

答案 0 :(得分:3)

我假设整个更改的混乱是由于您的合并冲突造成的。我建议做的是。

  1. 提交合并中的更改(完成)。你现在最终会提交这是暂时的(不要推!)
  2. git stash您未提交的更改,以便我们不会丢失它们。
  3. git log -3,这将显示您的合并提交以及之前的2次提交。在合并提交中,您将看到2 SHAS。一个是来自origin / master的最新提交,另一个是您分支上的最后一次提交。
  4. git reset --hard <SHA of YOUR last commit>这将在您合并之前重置您的分支,并删除您从master中引入的所有提交/更改。
  5. git stash pop将您未经提交的更改重新发送到您的分支机构。
  6. 由于您的更改都在您的本地分支上,因此您可以修改历史记录以使状态恢复到您想要的状态而不会出现任何问题。如果您确实需要任何暂存文件,请git reset -- <filenames>取消暂存,然后按照上述步骤操作。

答案 1 :(得分:3)

我想你可能想要git merge --abort 来自文档:

  

中止当前的冲突解决过程,并尝试重建合并前的状态。

     

如果合并开始时存在未提交的工作树更改,git merge --abort在某些情况下将无法重建这些更改。因此,建议在运行git merge之前始终提交或存储您的更改。

http://git-scm.com/docs/git-merge

答案 2 :(得分:1)

我有TortoiseGit来管理我的git回购,它非常方便。 这些是我要做的步骤(使用TortoiseGit) - 首先隐藏您的更改(TortoiseGit-&gt; Stash)并正确命名,以便将所有未提交的更改保存到存储中

  • 第二,(右击你的repo-&gt; TortoiseGit)&#34;显示日志&#34;这将显示所有更改日志,(假设您知道合并前的位置 - 也许您已经完成了一些提交)查找它,并右键单击该更改日志,说&#34;重置为此提交& #34;在下一节中选择&#34;硬重置&#34;这将从所选提交中删除所有提交到顶部,并删除更改。

  • 重新申请您的藏匿处(右键单击,TortoiseGit-&gt; Stash),然后应用您之前保存的藏匿

答案 3 :(得分:-1)

您可以恢复合并步骤,它会附加一个新的提交,撤消合并中的所有文件更改

$ git revert <merge_commit_hash>

如果你做$ git log --graph --oneline,你将不得不寻找类似的提交:“合并分支”foo“of”remote_x“blah blah”