我有两个具有完全相同文件的分支(如果您想知道它是一个 .sql 文件),我想以交互方式合并它。
几乎我想打开一个差异程序,就像我在发生冲突(或命令行)时所做的那样,并准确选择哪些行去哪里。
有没有办法做到这一点?
我有两个具有完全相同文件的分支(如果您想知道它是一个 .sql 文件),我想以交互方式合并它。
几乎我想打开一个差异程序,就像我在发生冲突(或命令行)时所做的那样,并准确选择哪些行去哪里。
有没有办法做到这一点?
是的,但主要是通过手动实现。你会告诉 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 <other_branch
方式git mergetool
解决冲突。有关如何设置合并工具的信息,请参阅#10935226 。
问题是,您更改的文件可能会与旧文件快速合并。然后你必须变得更聪明一点。
Novelocrat 提供了一种深入挖掘的好方法,但您通常必须将初始命令更改为,git merge --no-commit --no-ff <other_branch>
因为 --no-commit 的真正意思是“不要提交合并……除非它是快进合并。” 对于很多想要做你想做的事的人来说,这有点刺痛。
有时,最不令人困惑的方式不是很时髦:在不同的工作副本中检查另一个分支,使用您最喜欢的合并工具在您想要的目录中获取您想要的版本,然后提交它。
从您要合并到的分支:
git checkout -p branch_to_merge --
这不会检出 branch_to_merge,但会让您以交互方式从补丁(差异)中添加大块。
根据这个要点, temp 可能是现有的分支。
https://gist.github.com/katylava/564416
在主人:
git checkout -b temp
在温度:
git merge --no-commit --no-ff refactor
… 将所有内容分阶段,所以:
git reset HEAD
然后开始添加你想要的部分:
git add --interactive
我发现这样做的最好方法是: