我在分支
mybranch1
。 mybranch2
是从 mybranch1
分叉出来的,并在 mybranch2
中进行了更改。
然后,在
mybranch1
时,我已经完成了git merge --no-commit mybranch2
这表明合并时存在冲突。
现在我想丢弃所有内容(
merge
命令),以便mybranch1
回到之前的状态。
我不知道该怎么办。
最新 Git:
git merge --abort
这会尝试将您的工作副本重置为合并之前的状态。这意味着它应该恢复合并之前的任何未提交的更改,尽管它并不总是可靠地做到这一点。一般来说,无论如何你都不应该合并未提交的更改。
1.7.4版本之前:
git reset --merge
这是较旧的语法,但与上面的功能相同。
1.6.2 版本之前:
git reset --hard
删除所有未提交的更改,包括未提交的合并。有时,即使在支持上述命令的较新版本的 Git 中,这种行为也很有用。
实际上,值得注意的是,鉴于
git merge --abort
存在,git reset --merge
仅相当于MERGE_HEAD
。这可以在合并命令的 git 帮助中阅读。
git merge --abort # is equivalent to git reset --merge when MERGE_HEAD is present.
合并失败后,当没有
MERGE_HEAD
时,失败的合并可以用 git reset --merge
撤消,但不一定用 git merge --abort
,所以它们不仅仅是同一件事的新旧语法。
我个人发现
git reset --merge
在日常工作中更有用。
假设您使用的是最新的 git,
git merge --abort
如果使用最新的 Git,
git merge --abort
否则这将在旧的 git 版本中完成工作
git reset --merge
或
git reset --hard
有两件事你可以先通过命令撤消合并
git merge --abort
或
你可以通过命令暂时转到之前的提交状态
git checkout 0d1d7fc32
由于之前没有人提到过这一点,如果您收到此错误
fatal: Could not reset index file to revision 'HEAD'.
在尝试上述方法时,您可以尝试添加文件(暂存它们),然后您可以使用
git stash
标志并给它一个标签,这样您就知道您是否偶然需要恢复,而不是仅执行 -m
提交最后一个状态你可以通过 git stash list
找到藏匿处。
对我来说,
git reset --merge
和git merge --abort
因上述错误而失败。
源树
如果您不提交合并,则只需双击另一个分支(= checkout),当 sourcetree 询问您是否放弃所有更改时,请同意