我使用了git pull
,出现了合并冲突。
unmerged: _widget.html.erb
You are in the middle of a conflicted merge.
我知道另一个版本的文件是好的,而我的是坏的,所以我所有的修改都应该被放弃。我怎样才能做到这一点?
由于你的 "pull "不成功,那么 "HEAD"(而不是 "HEAD^")就是你的分支上最后的"有效"提交。
git reset --hard HEAD
你想要的另一块是让他们的修改覆盖你的修改。
旧版本的git允许你使用"theirs"合并策略。
git pull --strategy=theirs remote_branch
但后来这一点被取消了,正如Junio Hamano(Git维护者)的留言所解释的。 正如链接中指出的,你可以这样做。
git fetch origin
git reset --hard origin
如果你的git版本是>= 1.6.1,你可以使用git reset --merge
。
另外,正如 @Michael Johnson 提到的,如果你的 git 版本是 >= 1.7.4,你也可以使用 git merge --abort
。
一如既往,在你开始合并之前,请确保你没有未提交的改动。
来自 [git merge man page][1] 的内容
当存在 "MERGE_HEAD "时,"git merge --abort "相当于 "git reset --merge"。
MERGE_HEAD
存在时,合并正在进行中。
另外,关于开始合并时未提交的改动。
如果你有不想在开始合并前提交的改动,只需在合并前git stash
它们,在完成合并或中止合并后git stash pop
即可。
[1]: https://www.kernel.org/pub/software/scm/git/docs/git-merge.html
git merge --abort
中止当前的冲突解决进程,并尝试重新构建。
合并前的状态。 融合前的状态。 。 如果合并时有未提交的工作树变更存在,那么在合并前的状态下,就会出现未提交的工作树变更。 >.开始,"git merge --abort "在某些情况下将无法实现。 开始,"git merge --abort "在某些情况下将无法实现。
重构这些变化。 因此,建议总是 >.在运行 git merge 之前,先提交或隐藏你的修改。 在运行 git merge 之前提交或隐藏你的修改。 在运行git merge之前,提交或隐藏你的修改。
git merge --abort
等同于git reset --merge
,当
MERGE_HEAD
存在。
在这个特殊的用例中,你并不真的想中止合并,只是以一种特殊的方式解决冲突。
也没有特别的必要去重置和执行不同策略的合并。git已经正确地强调了冲突,并且要求接受对方的修改,只是针对这一个文件。
对于冲突中的未合并文件,git在索引中提供了该文件的通用基础、本地和远程版本。(这是由git mergetool
从这里读出的,以便在三向差异工具中使用)。你可以用git show
来查看它们。
# common base:
git show :1:_widget.html.erb
# 'ours'
git show :2:_widget.html.erb
# 'theirs'
git show :3:_widget.html.erb
解决冲突以逐字使用远程版本的最简单方法是。
git show :3:_widget.html.erb >_widget.html.erb
git add _widget.html.erb
或者,用git >=1.6.1。
git checkout --theirs _widget.html.erb
由于有评论认为 "git reset --merge "是 "git merge --abort "的别名,值得注意的是,"git merge --abort "只有在存在 "MERGE_HEAD "的情况下才等同于 "git reset --merge"。 这一点可以在git merge命令的帮助中阅读。
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 reset --hard HEAD
git pull --strategy=theirs remote_branch
git fetch origin
git reset --hard origin
请删除
.git\index.lock
文件[剪切粘贴到其他位置,以备恢复时使用],然后根据你想要的版本,输入以下任何一个命令。
git reset --hard HEAD
git reset --hard origin
希望能帮到你!!!
对于这样的情况,我做了 "git fetch "和 "git pull",然后发现上游分支不是主分支,导致了不必要的冲突。
git reset --merge
这在没有重置我的本地更改的情况下又恢复了。
自 Git 1.6.1.3 [git checkout
][1] 起,可以在合并后的任何一方进行签出。
git checkout --theirs _widget.html.erb