如何解决合并冲突后完成合并?
我已阅读Git社区书籍的基本分支和合并部分。
所以我遵循它创build一个分支: experimental
。
然后我:
- 切换到实验分支(git checkout实验)
- 做一堆改变
- 提交(git commit -a)
- 切换到主分支(git checkout master)
- 做一些改变,并在那里犯下
- 切换回实验(git checkout实验)
- 将主变更合并到实验(git merge master)
-
有一些冲突,但解决他们后,我做了'git add myfile'
-
而现在我被卡住了,我无法回到主人身边
当我做
$ git checkout master error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
我做了:
$ git rebase --abort
没有发生重build?
我做了:
$ git add res/layout/socialhub_list_item.xml $ git checkout master error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
我可以做什么,我可以回到我的主分支?
在合并期间发生冲突时,您必须手动完成合并提交。 这听起来像你已经完成了前两步,编辑冲突的文件,然后运行git add
他们标记为已解决。 最后,你需要用git commit
来提交合并。 此时您将可以再次切换分支。
如何解决合并冲突后完成合并?
使用Git 2.12(2017年第1季度),您将拥有更自然的命令:
git merge --continue
见Jeff King( peff
)的 提交c7d227d (2016年12月15日) 。
见Chris Packham( cpackham
)的 提交042e290 , 提交c261a87 , 提交367ff69 (2016年12月14日) 。
(由Junio C gitster
合并- gitster
– in commit 05f6e1b ,2016年12月27日)
merge
:添加“--continue
”选项作为“git commit
”的同义词教'
git merge
' – 继续选项,允许通过完成“继续”合并。
解决冲突后完成合并的传统方式是使用“git commit
”。
现在,像'git rebase
'和'git cherry-pick
'这样的命令有一个'--continue
'选项,在'git merge
'中添加这样一个选项可以提供一个一致的UI。
如果您在合并/重新绑定期间遇到问题,您可以随时进行
git reset --hard
把你的工作恢复到最后一次提交的状态。 这将会失去对工作树的更改,因此如果在合并之前进行了本地修改,则它们将在此之后消失 – 这就是为什么当您进行本地修改时不启动合并的原因。 🙂
每当你使用命令git merge brancha branchb
合并两个分支时,有两种可能性:
-
一个分支(可以说是brancha)可以通过其他分支(比如说branchb)通过跟踪它的提交历史到达。在这种情况下,git简单地快进头指向最近的分支(在本例中为branchb)。
但是,如果两个分支在某个较旧的点上有分歧,那么git会创build一个新的快照并添加一个指向它的新提交。 所以万一,如果你正在合并的分支之间没有冲突,git顺利地创build一个新的提交。
在合并两个不冲突的分支之后,运行
git log
来查看提交。
现在回到合并分支之间存在合并冲突的有趣案例。 我引用这个页面https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
Git没有自动创build一个新的合并提交。 在解决冲突的过程中,它暂停了这个过程。 如果您想查看合并冲突后的任何时间哪些文件未合并,则可以运行
git status
所以如果有合并冲突,你需要解决冲突,然后使用git add filename
添加你对暂存区所做的更改,然后使用由git暂停的命令git commit
来提交更改,因为冲突。我希望这解释你的查询。 也请访问以上链接了解详情。 如有任何疑问,请在下面留言,我很乐意提供帮助。
只是git commit
。
可以selectgit abort
它:
我遇到了合并冲突。 我怎样才能中止合并?
为了使合并更轻松安装kdiff3并将其configuration为mergetool。 说明: http : //doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/
该页面包含以下video: https : //www.youtube.com/watch?v = Cc4xPp7Iuzo
手动解决冲突后的下一步是:
- git add。
- git状态(这会告诉你哪些命令是继续自动合并过程所必需的)
- [命令gitbuild议,例如
git merge --continue
,git cherry-pick --continue
,git rebase --continue
]
我想明确的第一件事是分支名称只是特定提交的别名。 一个提交是git的工作,当你拉,推合并等等。 每个提交都有一个唯一的ID。
当你做$ git合并时,实际发生的事情是git试图快速转发你当前的分支到被引用分支所在的提交(换句话说,两个分支名字指向相同的提交)。这种情况是最简单的git因为没有新的提交。 想到大师跳到lilipad你的分支正在冷却。 可以设置–no-ff标志,在这种情况下git会创build一个新的提交,无论是否有代码冲突。
在你试图合并的两个分支之间存在代码冲突的情况下(通常两个分支的提交历史在过去共享一个共同的提交),快进将不起作用。 git仍然可以自动合并文件,只要同一行在冲突的文件中没有被两个分支所改变。 在这种情况下,git会为您合并冲突的文件并自动提交它们。 您可以通过执行$ git diff –cached来预览git的做法。 或者你可以将–no-commit标志传递给merge命令,这会将修改后的文件保留在你的索引中,你需要添加和提交。 但是你可以$ git diff这些文件来检查合并将会改变什么。
第三种情况是有git不能自动解决的冲突。 在这种情况下,您需要手动合并它们。 在我看来,这是最容易做到与合并,如araxis合并或p4merge(免费)。 无论哪种方式,你必须逐一做每个文件。 如果合并似乎被卡住,使用$ git merge –continue,来推动它。 Git应该告诉你它是否不能继续,如果有的话。 如果你觉得你在某个时候合并了,你可以做$ git merge –abort,任何合并都会被撤消,你可以重新开始。 完成后,您合并的每个文件都将是一个需要添加和提交的修改文件。 您可以使用$ git statusvalidation文件的位置。 如果还没有提交合并的文件。 您需要这样做才能完成合并。 您必须完成合并或中止合并,然后才能切换分支。