我试图将本地分支合并到主分支而不让Git进行自动注册.我想"亲自挑选"我想要合并为主人的东西.
当我使用Git的difftool命令时,我能够区分并选择我想要添加到主分支中的内容.但是当我合并时,我会失去我之前选择的东西,因为Git会做一个automerge.我可以在合并之前将更改提交到master中,但这样做似乎不自然.
Git的mergetool仅在合并发生冲突时才可用.但是如果Git做了automerge,那么通常没有冲突,所以我无法运行mergetool命令.
更新:
我开始认为我想要完成的是不好的做法,或者这是不可能的.也就是说,合并一个主题分支,只让它合并我需要的差异.此外,还有这一点反映在历史上.无论如何,我在试验Git时发布的问题浮出水面.
Fra*_*ace 77
您试图绕过Git参与合并过程并手动选择要合并的每个修改文件的每一行.这不一样git cherry-pick.也不会git merge --no-commit等等帮助.你需要做:
$ git checkout master
$ git difftool -t kdiff3 local-branch HEAD
Run Code Online (Sandbox Code Playgroud)
在KDiff3窗口中,左侧(A)是您的本地分支,右侧(B)是您当前的分支(主).
Merge | Merge Current File从菜单中选择(或按下具有相同标题的彩色菱形图标).
然后,您将看到每个文件的差异和冲突(如果有).并且您将能够选择左侧或右侧(A或B)或两者,和/或手动调整合并文件.
另一方面,有些事情告诉我你的工作流程存在一些更大的问题.
eck*_*kes 17
git merge --no-commit --no-ff <local-branch>
Run Code Online (Sandbox Code Playgroud)
可以.
执行时,将应用更改local-branch但尚未暂存.
然后,您可以查看要应用的更改 - 如果您想要全部使用它们 - 请应用它们
git commit -a
Run Code Online (Sandbox Code Playgroud)
否则,选择要采用的文件,将它们暂存git add并最终提交git commit.然后恢复不需要的文件git checkout -- filename.
我可以看到,如果您不信任自动合并,则可能希望这样做,因为在文件中不同位置进行的两次编辑(在不同分支上完成)可能不会导致自动合并引发冲突,但可能实际上不起作用一起。
您可能想看看使用自定义合并驱动程序。此页面描述了如何进行。
一种替代方法是,在执行合并之前,先找到分支之间的文件,然后将文件检出到适当的分支中,以确保获得干净的合并和功能代码,其中包含两个编辑中的一个或另一个。
git diff --name-only <branch1> <branch2>
git checkout <branch1> -- <paths>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47932 次 |
| 最近记录: |