在 merge.renameLimit 警告加上冲突后撤消 git merge
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10737966/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
undoing git merge after merge.renameLimit warning plus conflicts
提问by Stefano Borini
I am trying to do a merge squash from a devel branch into the master.
我正在尝试从开发分支到主分支进行合并壁球。
stefanos-imac:trunk borini$ git merge --squash devel
CONFLICT (content): Merge conflict in test1
warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your merge.renamelimit variable to at least 2224 and retry the command.
Squash commit -- not updating HEAD
Automatic merge failed; fix conflicts and then commit the result.
fair enough.
很公平。
stefanos-imac:trunk borini$ git config merge.renameLimit 999999
Then I try to undo the merge and redo it with the higher limit
然后我尝试撤消合并并使用更高的限制重做
stefanos-imac:trunk borini$ git merge --abort
fatal: There is no merge to abort (MERGE_HEAD missing).
Ok, so maybe I have to do as it says and just reinvoke the merge command
好的,所以也许我必须按照它说的去做,然后重新调用合并命令
stefanos-imac:trunk borini$ git merge --squash devel
fatal: 'merge' is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>' as
appropriate to mark resolution and make a commit, or use 'git commit -a'.
oh git, why are you such a git?
哦,混蛋,你怎么这么混蛋?
More to the point, does anyone know how to get out of this situation ?
更重要的是,有谁知道如何摆脱这种情况?
回答by holygeek
Em, git reset --hard origin/master
?
嗯,git reset --hard origin/master
?
回答by Martin G
The modern way to undo a merge is (but this only works when MERGE_HEAD is present):
撤消合并的现代方法是(但这仅在存在 MERGE_HEAD 时才有效):
git merge --abort
And the slightly older way, which will work in this case (MERGE_HEAD is missing):
而稍微旧的方式,在这种情况下会起作用(缺少 MERGE_HEAD):
git reset --merge
The old-school way described in accepted answer (warning: will discard all your local changes):
接受的答案中描述的老派方式(警告:将丢弃所有本地更改):
git reset --hard
So notice that git merge --abort
is only equivalent to git reset --merge
given that MERGE_HEAD
is present. This can be read in the git help for merge command.
所以请注意 thatgit merge --abort
只等价于git reset --merge
given that MERGE_HEAD
is present。这可以在合并命令的 git 帮助中阅读。
git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.
After a failed merge, when there is no MERGE_HEAD
, the failed merge can be undone with git reset --merge
but not necessarily with git merge --abort
.
合并失败后,如果没有MERGE_HEAD
,失败的合并可以用 撤消,git reset --merge
但不一定用git merge --abort
。
回答by PeloNZ
git merge --abort
will also do the trick. A bit quicker than typing the full git reset command.
git merge --abort
也能解决问题。比输入完整的 git reset 命令快一点。
Abort also works with rebase
and cherry-pick
.
Abort 也适用于rebase
和cherry-pick
。