Git 解决合并冲突后如何完成合并?
我已经阅读了Git社区书的部分 所以我按照它创建了一个分支:Git 解决合并冲突后如何完成合并?,git,git-merge,Git,Git Merge,我已经阅读了Git社区书的部分 所以我按照它创建了一个分支:实验性的 然后我: 切换到实验分支(git checkout实验) 做一系列的改变 提交它(gitcommit-a) 切换到主分支(git签出主分支) 进行一些更改并在那里提交 切换回实验(git checkout实验) 合并主机更改为实验(git合并主机) 存在一些冲突,但在解决这些冲突后,我执行了“git add myfile” 现在我被困住了,我不能回到主人身边 当我这样做的时候 $ git checkout master er
实验性的
然后我:
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
我做到了:
$ git rebase --abort
没有进行再基地
我做到了:
$ 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 commit-am“您的提交消息”
对跟踪文件同时执行添加和提交操作。(信用:@vaheeds)如果您在合并/重设基础时遇到问题,您可以随时
git reset --hard
将工作恢复到上次提交的状态。这将丢失工作树中的更改,因此,如果在合并之前进行了本地修改,这些更改将在合并之后消失,这就是为什么建议在进行本地修改时不要启动合并的原因。:) 手动解决冲突后的下一步是:-
git merge--continue
,git cherry pick--continue
,git rebase--continue
]每当使用命令git merge brancha branchb合并两个分支时,有两种可能性:
git log
查看提交
现在回到有趣的案例,合并分支之间存在合并冲突。我引用了这一页
Git没有自动创建新的合并提交。在您解决冲突时,它已暂停该过程。如果要查看在合并冲突后的任何时候哪些文件未合并,可以运行git status
因此,如果存在合并冲突,您需要解决冲突,然后使用
git add filename
将您所做的更改添加到临时区域,然后使用命令git commit
提交更改,该命令因冲突而被git暂停。我希望这能解释您的查询。也请访问上面的链接以获得详细了解。如果有任何疑问,请在下面发表评论,我很乐意提供帮助。只需git提交即可
可选git中止it:
为了简化合并操作,请安装kdiff3并将其配置为合并工具。说明:
该页面包含以下视频:我想澄清的第一件事是,分支名称只是特定提交的别名。提交是git在拉、推合并等操作中完成的。每个提交都有一个唯一的id
当您执行$git merge时,实际发生的情况是git尝试将当前分支快进到引用的分支所在的提交中(换句话说,两个分支名称都指向相同的提交)。这个场景对于git来说是最容易处理的,因为没有新的提交。想想主人跳到你的树枝上的百合花垫上。可以设置--no ff标志,在这种情况下,git将创建一个新的提交,而不管是否存在任何代码冲突
在您试图合并的两个分支之间存在代码冲突的情况下(通常是两个分支的提交历史记录在过去共享一个公共提交),快进将不起作用。git可能仍然能够自动合并文件,只要冲突文件中的两个分支没有更改同一行。在这种情况下,git将为您合并冲突文件并自动提交它们。您可以通过执行$git diff--cached预览git的工作方式。或者,您可以将--no commit标志传递给merge命令,这将在索引中留下修改过的文件,您需要添加和提交这些文件。但是您可以$git diff这些文件来查看合并将更改什么
第三种情况是git无法自动解决冲突。在这种情况下,您需要手动合并它们。在我看来,这是最容易做到的合并采取,如araxis合并或p4merge(免费)。无论哪种方式,您都必须逐个处理每个文件。如果合并似乎被卡住了,请使用$git merge--continue来推动它。Git应该告诉您它是否不能继续,如果可以,为什么不能。如果您觉得在某个时候合并失败了,可以执行$git merge--abort,任何合并都将撤消,您可以重新开始。完成后,合并的每个文件都将是需要添加和提交的修改文件。您可以使用$g验证文件的位置
git merge --continue
<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch
"git checkout "MAIN_BRANCH"
Auto-merging src/file1.py
CONFLICT (content): Merge conflict in src/file1.py
Auto-merging src/services/docker/filexyz.py
Auto-merging src/cache.py
Auto-merging src/props.py
CONFLICT (content): Merge conflict in src/props.py
Auto-merging src/app.py
CONFLICT (content): Merge conflict in src/app.py
Auto-merging file3
CONFLICT (content): Merge conflict in file3
Automatic merge failed; fix conflicts and then commit the result.
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: file3
both modified: src/app.py
both modified: src/props.py
both modified: src/utils/file1.py
git add file3
git add src/app.py
git add src/props.py
git add src/utils/file1.py
On branch MAIN_BRANCH
Your branch is ahead of 'origin/MAIN_BRANCH' by 10 commits.
(use "git push" to publish your local commits)