我如何完成合并后解决我的合并冲突?

我已经阅读了Git社区手册的基本分支和合并部分。

所以我遵循它并创建了一个分支:experimental

然后我:

  1. 切换到实验分支(git校验实验)
  2. 做一些改变
  3. 提交(git Commit -a)
  4. 切换到主分支(git checkout master)
  5. 做一些修改并提交
  6. 切换回实验性(git checkout experimental)
  7. 合并主机更改为实验性(git合并主机)
  8. 有一些冲突,但在我解决后,我做了'git add myfile'

  9. 现在我被困住了,我不能回到主人那里

当我做的时候

 $ 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.

我该怎么做才能回到我的主分支?

501008 次浏览

当合并过程中出现冲突时,必须手动完成合并提交。听起来好像你已经完成了前两个步骤,编辑冲突的文件,然后对它们运行git add,将它们标记为已解决。最后,你需要实际使用git commit提交合并。在这一点上,您将能够再次切换分支。

快速提示:你可以使用git commit -am "your commit message"同时对跟踪的文件执行添加和提交操作。(来源:@vaheeds)

如果你曾经被卡住在合并/重基,你可以总是

git reset --hard

将工作恢复到上次提交时的状态。这将丢失你在工作树中所做的更改,所以如果你在合并之前有局部修改,它们将在合并之后消失——这就是为什么当你有局部修改时不启动合并是明智的。:)

手动解决冲突后的下一步操作是:-

  1. Git添加。
  2. Git状态(这将显示继续自动合并过程需要哪些命令)
  3. [命令git建议,例如git merge --continuegit cherry-pick --continuegit rebase --continue]

当你使用git merge brancha branchb命令合并两个分支时,有两种可能:

  1. 一个分支(设为brancha)可以通过跟踪另一个分支(设为branchb)的提交历史来到达。在这种情况下,git只需快进头指向最近的分支(在这种情况下是branchb)。

    < p > 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会因为冲突暂停该命令。我希望这能解释你的问题。也请访问上面的链接以获得详细的了解。如果有任何疑问,请在下面评论,我很乐意帮助。

git commit它。

可选git abort it:
我遇到了合并冲突。如何终止合并? < / p >

为了简化合并操作,安装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=Cc4xPp7Iuzo

我想要明确的第一件事是,分支名称只是特定提交的别名。commit是git的工作,当你拖拽merge等等。每个提交都有一个唯一的id。

当你做$ git合并时,实际发生的事情是git试图快进你的当前分支到被引用的分支所在的提交(换句话说,两个分支名称都指向同一个提交)。这个场景对于git来说是最容易处理的,因为没有新的提交。想象一下主人跳上你的树枝上的百合花。可以设置——no-ff标志,在这种情况下,无论是否有任何代码冲突,git都会创建一个新的提交。

在您试图合并的两个分支之间存在代码冲突的情况下(通常是两个提交历史记录在过去共享一个共同提交的分支),快进将不起作用。Git仍然可以自动合并文件,只要冲突文件中的两个分支没有更改同一行。在这种情况下,git会为你合并冲突文件,并自动提交它们。你可以通过执行$ git diff——cached来预览git是怎么做的。或者您可以将——no-commit标志传递给merge命令,这将在您需要添加和提交的索引中保留修改过的文件。但是你可以用$ git区分这些文件来检查合并会改变什么。

第三种情况是存在git无法自动解决的冲突。在这种情况下,您需要手动合并它们。在我看来,这是最容易做到的合并采取,如araxis合并或p4merge(免费)。无论哪种方式,您都必须一个一个地处理每个文件。如果合并似乎卡住了,使用$ git merge—continue,推动它前进。Git会告诉你它是否不能继续,如果是,为什么不能。如果你觉得你把合并搞砸了,你可以做$ git merge -abort,任何合并都将撤销,你可以重新开始。完成后,您合并的每个文件都将是一个需要添加和提交的修改文件。您可以使用$ git状态来验证文件的位置。如果您还没有提交合并的文件。您需要这样做才能完成合并。在切换分支之前,您必须完成合并或中止合并。

我如何完成合并后解决我的合并冲突?

使用Git 2.12(2017年第一季度),您将拥有更自然的命令:

git merge --continue

如果你不想在继续/恢复合并时编辑消息:

git merge --continue --no-edit

如果--no-edit不起作用,就像的评论中报告的那样,你可以这样做:

# Linux
GIT_EDITOR=true git merge --continue


# Windows
cmd /V /C "set "GIT_EDITOR=true" && git merge --continue"

您可以为这些命令定义别名。


参见提交c7d227d (15 Dec 2016) by 杰夫·金(peff)
参见克里斯·帕克汉姆(cpackham)提交042年e290提交c261a87提交367年ff69(2016年12月14日)。
(由Junio C Hamano—gitster提交05 f6e1b中合并,2016年12月27日)

看到2.12发行说明

merge:添加'--continue'选项作为'git commit'的同义词

教会'git merge' --continue选项,该选项允许'继续' a 通过完成合并。
解决冲突后完成合并的传统方法是使用'git commit'。
现在像'git rebase'和'git cherry-pick'这样的命令具有'--continue'选项,将这样的选项添加到'git merge'会呈现一致的UI

合并冲突发生时,您试图合并两个分支都更改了同一文件的同一部分。你可以用git status生成一个冲突列表。

当遇到冲突行时,Git将使用标记冲突内容两边的可视指示器编辑受影响文件的内容。

<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch

当你修复了冲突文件并准备合并时,你所要做的就是运行git addgit commit来生成合并提交。一旦提交完成,git push对分支的更改。

参考文章:Git合并

添加完所有文件后,下一步是“git提交”。

“git status”会提示要做什么:尚未添加的文件被列在底部,一旦它们都完成了,它会建议在顶部提交,在那里它解释了当前分支的合并状态。

可能会晚了。这是发生,因为你的git HEAD没有更新。 这个推荐将解决git reset HEAD.

.

冲突解决步骤: .

  1. 第一次“签出”到你想从另一个分支合并的分支 李分支(BRANCH_NAME_TO_BE_MERGED) < / >

"git checkout "MAIN_BRANCH"
  1. 然后将它与“MAIN_BRANCH"使用命令:

git合并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.

现在你可以看到它正在显示“冲突(内容)”到那些有“冲突”,查看您的代码并解决它们的文件

  1. 运行“git status" =>它会显示你需要添加的文件(你已经解决了):

 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
  1. 解决了所有冲突后,使用下面的git命令逐个添加每个文件

git add file3
git add src/app.py
git add src/props.py
git add src/utils/file1.py
  1. < >强“git commit" (当你准备提交时添加一些消息,如果没有,它将打开vi或vim编辑器,你需要按“;esc:q!”然后按回车键
  2. 再次运行“git status"

 On branch MAIN_BRANCH
Your branch is ahead of 'origin/MAIN_BRANCH' by 10 commits.
(use "git push" to publish your local commits)

7. __abc0

另一个选择也是,我尝试了隐藏和工作为我没有任何承诺

在你解决了所有的矛盾之后,

→git藏

→Git应用stash@{0}

工作很好,你也可以切换到另一个分支。