How do I finish the merge after resolving my merge conflicts?
我已经阅读了Git社区书的基本分支和合并部分。
所以我跟着它创建了一个分支:
然后我:
有一些冲突,但在我解决之后,我确实添加了我的文件。
现在我被困住了,我不能再回到主人身边了
当我这样做的时候
1 2 | $ git checkout master error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge. |
我做到了:
1 | $ git rebase --abort |
号
没有正在进行的重新平衡?
我做到了:
1 2 3 | $ 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. |
我该怎么做才能回到我的总支?
合并过程中出现冲突时,必须手动完成合并提交。听起来您已经完成了前两个步骤,编辑了有冲突的文件,然后对它们运行
How do I finish the merge after resolving my merge conflicts?
号
使用git 2.12(2017年第1季度),您将拥有更自然的命令:
1 | git merge --continue |
见Jeff King(
参见2.12发行说明。
merge : add '--continue ' option as a synonym for 'git commit 'Teach '
git merge ' the--continue option which allows 'continuing' a
merge by completing it.
The traditional way of completing a merge after resolving conflicts is to use 'git commit '.
Now with commands like 'git rebase ' and 'git cherry-pick ' having a '--continue ' option adding such an option to 'git merge ' presents a consistent UI.
号
如果在合并/重新平衡过程中卡住,可以
1 | git reset --hard |
将您的工作恢复到上一次提交的状态。这将丢失工作树中的更改,因此如果在合并之前进行了本地修改,则在合并之后这些更改将消失,这就是为什么在进行本地修改时建议不要启动合并。:)
就这样。
可选
为了使合并时的生活更容易,请安装kdiff3并将其配置为合并工具。说明:http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/
该页面包含以下视频:https://www.youtube.com/watch?V=cc4pp7iuzo
每当使用命令
另一个分支(比如brancha)可以通过跟踪它的提交历史来访问一个分支(比如branchb),在这种情况下,git只需快速地向前移动头来指向最近的分支(比如branchb)。
2.但是如果两个分支在某个较旧的点上发生分歧,那么Git将创建一个新的快照,并添加一个指向它的新提交。所以以防万一您要合并的分支之间没有冲突,Git顺利地创建了一个新的提交。
Run
git log to see the commit after you have merged two non-conflicting branches.
号
现在回到有趣的情况,合并分支之间存在合并冲突。我在https://git-scm.com/book/en/v2/git-branching-basic-branching-and-merging页引用了这个。
Git hasn’t automatically created a new merge commit. It has paused the process while you resolve the conflict. If you want to see which files are unmerged at any point after a merge conflict, you can run
git status
号
因此,如果存在合并冲突,您需要解决冲突,然后使用
手动解决冲突后的下一步是:
在添加了所有文件之后,下一步就是"git提交"。
"git status"将建议您做什么:底部列出了尚未添加的文件,完成后,它将在顶部建议提交,解释当前分支的合并状态。
当试图合并的两个分支更改了同一文件的同一部分时,就会发生合并冲突。您可以生成与
当遇到冲突行时,Git将使用标记冲突内容两侧的视觉指示器编辑受影响文件的内容。
1 2 3 4 5 | <<<<<<< HEAD conflicted text from HEAD ======= conflicted text from merging_branch >>>>>>> merging_branch |
号
当修复冲突文件并准备合并时,您所要做的就是运行
参考文章:Git合并。
我要澄清的第一件事是,分支名称只是特定提交的别名。提交就是git的工作原理,当你拉,推合并等等。每个提交都有一个唯一的ID。
当您进行$git合并时,实际发生的情况是git尝试将当前分支快速转发到引用分支所在的提交(换句话说,两个分支名称都指向同一提交)。对于git来说,这种情况最容易处理,因为没有新的提交。想想大师跳上你树枝上的百合花。可以设置--no ff标志,在这种情况下,Git将创建一个新的提交,不管是否有任何代码冲突。
在您试图合并的两个分支之间存在代码冲突的情况下(通常是两个提交历史记录在过去共享一个公共提交的分支),快进无法工作。Git可能仍然能够自动合并文件,只要冲突文件中的两个分支没有更改同一行。在这种情况下,Git将为您合并冲突文件并自动提交它们。您可以通过执行$git diff——缓存来预览git是如何做到的。或者您可以将--no commit标志传递给merge命令,它将在索引中保留修改过的文件,您需要添加和提交这些文件。但是您可以对这些文件进行$git diff,以查看合并将更改什么。
第三种情况是当存在冲突时,Git无法自动解决。在这种情况下,您需要手动合并它们。在我看来,这是最容易做的合并采取,如阿拉西斯合并或p4merge(免费)。不管是哪种方式,您都必须逐个处理每个文件。如果合并似乎被卡住了,使用$git merge——继续,推动它前进。Git应该告诉你它是否不能继续,如果可以,为什么不继续。如果您觉得在某个时刻合并失败了,您可以执行$git合并--中止,任何合并都将撤消,您可以重新开始。完成后,合并的每个文件都将是一个需要添加和提交的修改过的文件。您可以验证文件在$git状态下的位置。如果尚未提交合并文件。您需要这样做才能完成合并。在切换分支之前,必须完成合并或中止合并。
可能很晚了。这是因为你的Git头没有更新。这一建议将解决这一问题。