我以前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 pull --strategy=theirs remote_branch
但是,这已被移除,如在解释此消息由JUNIO滨野 (Git的维护者)。 正如指出的链接 ,而不是你这样做:
git fetch origin
git reset --hard origin
如果你的Git版本为> = 1.6.1,您可以使用git reset --merge
。
此外,作为@迈克尔约翰逊提到,如果你的Git版本为> = 1.7.4,你也可以用git merge --abort
。
与往常一样,请确保您启动合并之前你没有提交的更改。
从混帐合并人页
git merge --abort
相当于git reset --merge
当MERGE_HEAD
存在。
MERGE_HEAD
存在合并时正在进行中。
此外,从合并时就提交的修改:
如果你有改变你不想启动合并之前提交,只需要git stash
在合并之前他们git stash pop
完成合并或中止之后。
git merge --abort
中止目前的冲突解决过程,并试图重建预合并状态。
如果有未提交worktree变化存在时合并开始,
git merge --abort
会在某些情况下无法重建这些变化。 因此,建议总是犯或运行git合并之前藏匿更改。
git merge --abort
相当于git reset --merge
当MERGE_HEAD
存在。
http://www.git-scm.com/docs/git-merge
我认为这是git reset
你的需要。
要注意的是git revert
意味着什么,比方说,非常不同的svn revert
-在Subversion中的还原会舍弃你的(未提交)更改,返回文件从资源库中的当前版本,而git revert
“撤消”提交。
git reset
应该做的相当于svn revert
,也就是放弃你的随意更改。
在这个特殊的使用情况下,你真的不希望中止合并,只是解决一个特定的方式冲突。
有没有特别需要复位,并用不同的策略进行合并,无论是。 冲突已经通过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 merge --abort
Git的本身说明你当你在这种类型的麻烦和运行的git status命令的解决方案。
git status
希望这将帮助人们。
由于言论表明, git reset --merge
是一个别名git merge --abort
,但值得注意的是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 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的1.6.1.3 git checkout
已经能够从合并的两侧结帐:
git checkout --theirs _widget.html.erb
另一种,它保留了工作副本的状态是:
git stash
git merge --abort
git stash pop
我通常反对这项建议,因为它有效地就像在Subversion的合并,因为它扔掉在以下提交这个分支的关系。
我发现我下面的工作(恢复单个文件预先合并状态):
git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset*