我用了 git pull 合并冲突:
unmerged: _widget.html.erb
You are in the middle of a conflicted merge.
我知道该文件的其他版本是好的,我的是坏的所以我的所有更改都应该放弃。我怎样才能做到这一点?
我用了 git pull 合并冲突:
unmerged: _widget.html.erb
You are in the middle of a conflicted merge.
我知道该文件的其他版本是好的,我的是坏的所以我的所有更改都应该放弃。我怎样才能做到这一点?
既然你的 pull 那是不成功的 HEAD (不 HEAD^)是您分支上的最后一次“有效”提交:
git reset --hard HEAD
你想要的另一件事就是让他们的改变超越你的改变。
较旧版本的git允许您使用“他们的”合并策略:
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合并手册页
git merge --abort 相当于 git reset --merge 什么时候 MERGE_HEAD 存在。
MERGE_HEAD 合并正在进行时存在。
此外,关于开始合并时未提交的更改:
如果你有改变,你不想在开始合并之前提交,只是 git stash 他们在合并之前 git stash pop 完成合并或中止后。
git merge --abort
中止当前的冲突解决过程,并尝试重建 合并前的状态。
如果合并时存在未提交的工作树更改 开始,
git merge --abort在某些情况下会无法做到 重建这些变化。因此建议始终使用 在运行git merge之前提交或存储您的更改。
git merge --abort相当于git reset --merge什么时候MERGE_HEAD存在。
在这个特定的用例中,您并不想真正中止合并,只需以特定方式解决冲突。
也没有特别需要重置和执行与不同策略的合并。 git正确地突出了冲突,接受其他方面更改的要求仅适用于这一个文件。
对于冲突中的未合并文件,git使索引中的文件的公共基础,本地和远程版本可用。 (这是他们阅读的地方,用于3-way diff工具 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 你需要。
要小心 git revert 意味着一些与众不同的东西,比方说 svn revert - 在Subversion中,revert将丢弃您的(未提交的)更改,将文件从存储库返回到当前版本,而 git revert “撤消”提交。
git reset 应该做相当于 svn revert,也就是说,丢弃不需要的更改。
由于评论表明 git reset --merge 是别名 git merge --abort,值得注意的是 git merge --abort 只相当于 git reset --merge鉴于一个 MERGE_HEAD 存在。这可以在git help for 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 1.6.1.3起 git checkout 已经能够从合并的任何一方结账:
git checkout --theirs _widget.html.erb