我已阅读Git社区图书的Basic Branching and Merging部分。
所以我按照它创建了一个分支:experimental
。
然后我:
有一些冲突,但在我解决之后,我确实'git add myfile'
现在我被卡住了,我无法回到主人身上
当我做的时候
$ 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.
我能做些什么才能回到主分支?
答案 0 :(得分:219)
合并期间发生冲突时,您必须手动完成合并提交。听起来你已完成前两个步骤,编辑冲突的文件,然后对它们运行git add
以将它们标记为已解决。最后,您需要实际提交与git commit
的合并。此时,您将能够再次切换分支。
答案 1 :(得分:98)
如何在解决合并冲突后完成合并?
使用Git 2.12(2017年第一季度),您将拥有更自然的命令:
git merge --continue
commit c7d227d见Jeff King (peff
)(2016年12月15日)
commit 042e290见commit c261a87,commit 367ff69,Chris Packham (cpackham
)(2016年12月14日)。
(Junio C Hamano -- gitster
--于2016年12月27日commit 05f6e1b合并)
的同义词
merge
:添加&{39;--continue
'选项作为'git commit
'教导'
git merge
'--continue
选项,允许'继续'一个 完成合并。
解决冲突后完成合并的传统方式是使用'git commit
' 现在使用'git rebase
'等命令和'git cherry-pick
'拥有'--continue
'选项将此选项添加到'git merge
'提供一致的用户界面。
答案 2 :(得分:22)
如果你在合并/ rebase期间遇到困难,你总是可以
git reset --hard
将您的工作恢复到上次提交的状态。这将从工作树中丢失您的更改,因此如果您在合并之前进行了本地修改,它们将在此之后消失 - 这就是为什么在您进行本地修改时不建议合并的原因。 :)
答案 3 :(得分:9)
只需git commit
。
可选git abort
它:
I ran into a merge conflict. How can I abort the merge?
为了让合并更轻松,请安装kdiff3并将其配置为mergetool。说明:http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/
答案 4 :(得分:8)
每当使用命令git merge brancha branchb
合并两个分支时,有两种可能性:
一个分支(比如brancha)可以通过跟随其提交历史来到达另一个分支(比如branb)。在这种情况下,git只需快进头部指向最近的分支(在此case branchb)。
2.但是如果两个分支在某个较旧的点分歧,那么git会创建一个新的快照并添加一个指向它的新提交。所以,如果你正在合并的分支之间没有冲突,git会顺利地创建一个新的提交。
运行
git log
以在合并两个非冲突分支后查看提交。
现在回到合并分支之间存在合并冲突的有趣情况。我在页面https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
中引用此内容Git尚未自动创建新的合并提交。在您解决冲突时,它已暂停该过程。如果要在合并冲突后的任何时候查看哪些文件未合并,您可以运行
git status
因此,如果存在合并冲突,您需要解决冲突,然后使用git add filename
添加对登台区域所做的更改,然后使用命令git commit
提交更改。由于冲突而被git暂停。我希望这可以解释您的查询。另外,请访问上面的链接以了解详细信息。如有任何疑问,请在下面发表评论,我们乐意为您提供帮助。
答案 5 :(得分:6)
手动解决冲突后的下一步是: -
git merge --continue
,git cherry-pick --continue
,git rebase --continue
] 答案 6 :(得分:2)
添加完所有文件后,下一步是“ git commit ”。
“ git status”将建议操作:在底部列出尚未添加的文件,一旦完成,将在顶部建议进行提交,以解释当前分支的合并状态。
答案 7 :(得分:2)
解决冲突的步骤:
"git checkout "MAIN_BRANCH"
“ git merge origin / BRANCH_NAME_TO_BE_MERGED ”
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.
现在您可以看到它向那些带有“ CONFLICT”的文件显示“ CONFLICT(内容)”,查看您的代码并对其进行解析
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)
7. “ git push”
答案 8 :(得分:1)
我想说清楚的第一件事是分支名称只是特定提交的别名。一个提交是git工作,当你拉,推合并等等。每个提交都有一个唯一的ID。
当你执行$ git merge时,实际发生的是git尝试将当前分支快进到引用分支所在的提交(换句话说,两个分支名称都指向同一个提交。)此场景是最容易让git处理,因为没有新的提交。想想大师跳到lilipad你的分支是令人不寒而栗的。可以设置--no-ff标志,在这种情况下git将创建一个新的提交,无论是否存在任何代码冲突。
在您尝试合并的两个分支之间存在代码冲突的情况下(通常两个分支的提交历史记录在过去共享一个公共提交),快进将不起作用。 git可能仍然能够自动合并文件,只要在冲突的文件中两个分支都没有更改同一行。在这种情况下,git将为您合并冲突的文件并自动提交它们。您可以通过执行$ git diff --cached来预览git的功能。或者您可以将--no-commit标志传递给merge命令,该命令将在您需要添加和提交的索引中保留已修改的文件。但你可以$ git diff这些文件以查看合并将改变的内容。
第三种情况是当有冲突时git无法自动解决。在这种情况下,您需要手动合并它们。在我看来,这是最容易做的合并,如araxis merge或p4merge(免费)。无论哪种方式,您都必须逐个完成每个文件。如果合并似乎被卡住了,请使用$ git merge --continue来推动它。 Git应该告诉你它是否无法继续,如果是这样,为什么不呢。如果你觉得你在某个时候点亮了合并,你可以做$ git merge -abort,任何合并都会撤消,你可以重新开始。完成后,您合并的每个文件都将是一个需要添加和提交的已修改文件。您可以使用$ git status验证文件的位置。如果您尚未提交合并文件。您需要这样做才能完成合并。您必须先完成合并或中止合并才能切换分支。
答案 9 :(得分:1)
当您尝试合并的两个分支都改变了同一文件的相同部分时,会发生合并冲突。您可以使用git status
生成冲突列表。
当遇到冲突的行时,Git将使用标记冲突内容两侧的可视指示符编辑受影响文件的内容。
<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch
当您修复冲突的文件并准备合并时,您所要做的就是运行git add
和git commit
来生成合并提交。提交后,git push
对分支进行更改。
参考文章:Git merge。
答案 10 :(得分:0)
可能已经晚了。这是因为您的git HEAD未更新。
此建议可以解决git reset HEAD
。
答案 11 :(得分:0)
还有另一个选择,我尝试了 stash 并且在没有任何提交的情况下对我工作得很好
解决所有冲突后,
-> git 存储
-> git stash 应用 stash@{0}
工作正常,您也可以在此之后切换到另一个分支。