如何防止使用git automerge?

我正在尝试将本地分支合并到主分支中,而不让Git执行automerge。 我想“手拣”我想合并成主人。

当我使用Git的difftool命令,我可以比较和select我想要添加到主分支。 但是当我进行合并的时候,我会失去之前select的,因为Git会做一个自动合并。 我可以在合并之前将这些变化交给主人,但这样做似乎不自然。

而Git的mergetool只有在合并冲突时才可用。 但是,如果Git执行automerge,那么通常没有冲突,所以我无法运行mergetool命令。

更新:我开始认为我正在努力完成的是不好的做法,或者这是不可能的。 也就是说,合并一个主题分支,只有它合并我需要从差异。 另外,这也反映在历史上。 无论如何,当我尝试使用git的时候,我发布的这个问题已经浮出水面。

你要做的是绕过Git参与合并过程,并手动select每个要合并的修改文件的每一行。 这不像git cherry-pickgit merge --no-commit也不会git merge --no-commit等帮助。 以下是您需要做的事情:

 $ git checkout master $ git difftool -t kdiff3 local-branch HEAD 

KDiff3窗口中,左边( A )是您的本地分支 ,右边( B )是您当前的分支(主)
selectMerge | Merge Current File 从菜单中Merge | Merge Current File (或按相同标题的彩色菱形图标)。
然后您将显示每个文件的差异和冲突(如果有的话)。 而且你将能够select左侧或右侧( AB ),或者两者同时,和/或手动调整合并的文件。

另一个说明,有些事情告诉我,你的工作stream程有一些更大的问题。

 git merge --no-commit --no-ff <local-branch> 

可以。

执行它时,将应用来自local-branch的更改,但尚未分阶段执行。

然后,您可以查看要应用的更改,并在需要时将其应用于其中

 git commit -a 

否则,请select要使用的文件,使用git add阶段化,最后使用git commit 。 然后用git checkout -- filename恢复不需要的文件。

我可以看到,如果您不信任自动合并,您可能希望这样做,因为在文件中的不同位置进行两次编辑(在不同的分支上完成)可能不会导致自动合并来引发冲突,但实际上可能不起作用一起。

您可能想看看使用自定义合并驱动程序。 本页介绍如何去做。

Git – 如何强制合并冲突和手动合并选定的文件

另一种方法是在执行合并之前首先查找分支之间不同的文件,然后将文件签出到适当的分支中,以确保获得一个干净的合并和包含两个编辑中的一个或另一个的function性代码。

 git diff --name-only <branch1> <branch2> git checkout <branch1> -- <paths> 

我想你想挑选个人的变化:

 git checkout master git log --reverse --oneline topic ^master 

然后调用你希望在master分支中提交的每个提交的git cherry-pick

如果主题分支中的其余更改应该保留,那么您可能还想在新主控上重新分配此分支:

 git rebase master topic