如何在Git中手动合并所有文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Git中手动合并所有文件?相关的知识,希望对你有一定的参考价值。
我想手动合并所有文件与meld或任何其他diff工具,我怎么能用Git做到这一点?
当我运行git mergetool
时,它说no files need merging
。所以我想我只有在遇到冲突时才能这样做。
有更简单的方法:
git merge --no-commit merge_branch
正如男人所说:
使用
--no-commit
执行合并但假装合并失败并且不自动提交,以便让用户有机会在提交之前检查并进一步调整合并结果。
我有一个场景:
git merge --no-commit merge_branch
刚刚造成快进。
如果发生这种情况,您可以使
git merge --no-commit --no-ff merge_branch
然后你就可以查看你的更改了
类似的问题是How to prevent an automerge using git?
分形空间有一个我觉得有用的答案:
$ git checkout master
$ git difftool -t kdiff3 local-branch HEAD
这个想法是使用difftools而不是自动合并工具来手动选择你需要的东西并创建新文件。
请注意,如果您坚持手动合并(可能是某类文件),您仍然可以定义合并驱动程序。 你在“Git - how to force merge conflict and manual merge on selected file”中有一个具体的例子。
这样,您的合并驱动程序脚本可以调用您想要的任何合并工具。
对于任何来到这里并且现在想知道使用git difftool
的@ True的答案和使用git merge
的其他答案之间的区别的人,请参阅Git mergetool vs difftool。
简而言之,如果您将git配置为使用现代diff.tool
(如kdiff3,meld或vimdiff),您将能够使用diff工具本身手动合并不同的文件,并且命令行可以很简单:
git difftool other_branch
...这将允许您在当前分支和other_branch之间进行双向手动合并(在man git-config
中描述为$ LOCAL和$ REMOTE)。
其他答案讨论的“正确”方式是将git配置为使用例如git。 kdiff3或vimdiff作为你的merge.tool
,并使用:
git merge --no-commit --no-ff other_branch
git mergetool
...此命令可以在$ BASE,$ LOCAL和$ REMOTE之间进行N路手动合并,进入$ MERGED。有关如何配置git的一个示例,请参阅https://stackoverflow.com/a/2235841/1264797。如果您使用git已经知道的工具之一,那么您根本不需要配置mergetool.*.cmd
条目。 (Meld只能显示三个窗格,所以如果你使用默认设置的meld,你将看不到$ BASE。)
有人可能会跳进来纠正我,但除了N路合并能力之外,这两种方法似乎产生了相同的结果。 difftool
和mergetool
都没有在新提交中添加other_branch作为父级,因此在这两种情况下,合并在例如gitk并且必须在提交消息中进行描述(并在后面注意到)。
我选择了我们的策略(它也存在于TortoiseGit中作为选择),在做了手动差异之后,你手动进行了所需的更改。
来自:https://git-scm.com/docs/merge-strategies
合并机制(git merge和git pull命令)允许使用-s选项选择后端“合并策略”。一些策略也可以采用自己的选项,可以通过给git merge和/或git pull提供-X参数来传递。
我们的
这会解析任意数量的头,但合并的结果树始终是当前分支头的树,实际上忽略了所有其他分支的所有更改。它旨在用于取代侧枝的旧发展历史。请注意,这与“递归”合并策略的-Xours选项不同。
Bitbucket后来看到的对我来说是一个谜,它认为提交为合并但未能实际合并分支(不解决拉动请求) - 可能Bitbucket大师可以帮助解决这个问题,我甚至不能给你任何日志/错误消息,因为我没有那个可见性 - git / TortoiseGit根本没有抱怨。
以上是关于如何在Git中手动合并所有文件?的主要内容,如果未能解决你的问题,请参考以下文章