如何防止使用git automerge?
我正在尝试将本地分支合并到主分支中,而不让Git执行automerge。 我想“手拣”我想合并成主人。
当我使用Git的difftool命令,我可以比较和select我想要添加到主分支。 但是当我进行合并的时候,我会失去之前select的,因为Git会做一个自动合并。 我可以在合并之前将这些变化交给主人,但这样做似乎不自然。
而Git的mergetool只有在合并冲突时才可用。 但是,如果Git执行automerge,那么通常没有冲突,所以我无法运行mergetool命令。
更新:我开始认为我正在努力完成的是不好的做法,或者这是不可能的。 也就是说,合并一个主题分支,只有它合并我需要从差异。 另外,这也反映在历史上。 无论如何,当我尝试使用git的时候,我发布的这个问题已经浮出水面。
你要做的是绕过Git参与合并过程,并手动select每个要合并的修改文件的每一行。 这不像git cherry-pick
。 git 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左侧或右侧( A
或B
),或者两者同时,和/或手动调整合并的文件。
另一个说明,有些事情告诉我,你的工作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