我有两个具有完全相同文件的分支(以防您想知道它是一个.sql文件),并且我想交互式地合并它。
我几乎想像在发生冲突(或命令行)时一样打开一个diff程序,并精确选择行的位置。
反正有这样做吗?
Answers:
是的,但这主要是通过手动实现。您将告诉Git您正在合并两个相关的分支,但是它不应该尝试自己提交结果(编辑为添加:如果认为合并是微不足道的,也不能进行快速转发):
git merge --no-commit --no-ff branch-to-merge
然后,您将询问git出现在两个分支中的文件:
git show HEAD:filename >filename.HEAD
git show branch-to-merge:filename >filename.branch
及其合并基础,
git show `git merge-base HEAD branch-to-merge`:filename >filename.base
您将使用所需的任何工具合并它们(例如)
meld filename.{HEAD,branch,base}
您将分阶段(git add filename
),然后提交合并(git commit
)。
git merge -s ours
保留为当前分支中的所有内容,但是可以确保其他文件中的更改完全由您决定。
git merge --no-commit --no-ff
完全不会提交任何内容,请参阅下面的@ Brad-O答案。您必须包括--no-ff
最简单的方法是做git merge <other_branch
然后git mergetool
以图形方式解决冲突。有关如何设置mergetool的信息,请参见#10935226。
问题是,您更改的文件可能会与较旧的文件快速合并。然后,您必须变得更加聪明。
Novelocrat提供了一种更好的方法来进行更深入的了解,但是您通常必须将初始命令更改为git merge --no-commit --no-ff <other_branch>
--no-commit的真正含义是“不要提交合并……除非它是快速合并。” 对于很多想完全按照自己的意愿做事的人来说,这有点像毒刺。
有时,最令人困惑的方法不是很时髦:在另一个工作副本中签出另一个分支,使用您喜欢的合并工具在所需目录中获取所需版本,然后提交。
按照这个要点,temp可能是现有分支。
https://gist.github.com/katylava/564416
在母版上:
git checkout -b temp
在温度下:
git merge --no-commit --no-ff refactor
…分阶段进行,所以:
git reset HEAD
然后开始添加所需的片段:
git add --interactive
git commit
不做合并!–如何最终完成合并?
从您要合并到的分支中:
git checkout -p branch_to_merge --
这不会签出branch_to_merge,但可以让您从补丁(diff)中交互地添加块。
git merge --no-commit branch
,最终将它合并了...我想要的是最终得到3个文件或2个文件。我可以使用diff并将所有想要的内容移到该文件中。