Git:使用Kdiff3从另一个分支合并到分支

3

我熟悉ClearCase,在其中我们可以从任何其他分支将文件合并到一个分支中。在git中如何实现这一点呢? 例如,我有以下结构:

master--->branch_2
  |
  |
  V
branch_1

现在 branch_1branch_2 都有一些独立的开发。我想使用像 kdiff3 这样的合并工具将 branch_2 中的某些特定代码合并到 branch_1 中。

编辑: Kdiff3 通过比较文件的 2 或 3 个版本(来自同一分支或不同分支)提供了一个出色的合并选项,突出显示冲突。然后我们可以跳过每个冲突,从一个或多个文件版本中选择代码,进行一些编辑(如果需要),最后保存文件。当我使用 ClearCase 时,这个功能对我非常有用。是否有办法配置 git mergetool 与 kdiff3 以相同的方式工作?

提前致谢


“_一些特定的代码_”是什么意思?您想合并一些特定的_commits_,从特定的_commits_中的某些_files_或仅从特定_commits_中的特定_files_中获取一些_changes_吗?您可以任选其中任何一种方式 :) - Enrico Campidoglio
3个回答

1

听起来您想从一个给定的提交中合并特定的更改部分到branch_2中。

如果是这样,您可以使用git cherry-pick --no-commit或(-n)来应用branch_2中提交的更改,而不创建新的提交。从那时起,您可以决定哪些更改要提交,仅将修改后的文件部分标记为已暂存。

以下是一个例子:

git checkout branch_1
git cherry-pick -n <some-commit>  # 1. Apply the changes from some commit in branch_2
                                  # without creating a new commit
git reset HEAD                    # 2. Unstage all changes from that commit
git add -p                        # 3. Decide which changes to include in the commit
git commit                        # 4. Commit those changes

1
站在branch_1分支上,你可以简单地从branch_2中挑选任何想要的提交(commit)。
git cherry-pick <some sha1>

你也可以将你的工作在branch_1中rebase,这样它就会在branch_2之后。
git rebase --onto branch_2 branch_1

谢谢。有没有办法将git cherry-pick与kdiff3的合并功能集成在一起? - balajimc55
我相信如果你从cherry-picking中得到了冲突,你只需要启动kdiff3来解决冲突,就像处理任何冲突一样。 - Andreas Wederbrand

0

切换到目标分支:

git checkout branch1

在参考branch2版本的同时编辑branch1代码

git difftool branch2 -- file.txt

像往常一样提交更改

git add file.txt
git commit

但是 difftool 命令只会在两个分支之间为文件提供差异,它并不提供合并选项... - balajimc55
git diff 只是提供了一个差异。 git difftool 调用当前配置的 difftool。如果它是具有编辑或合并功能的 difftool(例如 vimdiff - 甚至可能是 kdiff3,我从未使用过),则您将能够合并(即编辑合并,而不是 git merge)。如果您有特定的提交要传输到另一个分支,而不是实际使用合并工具来选择您想要的内容,则请使用 Andreas 的建议。 - Amadan
哦,对不起。我之前说的“diff”,实际上是指“差异(difference)”,而不是 'git diff'。无论如何,现在我明白你的意思了。我使用kdiff3,当它显示差异时,我不能进行编辑(至少我没有意识到)。我只能通过从 'git mergetool' 命令中调用它来进行更改。不管怎样,还是谢谢! - balajimc55

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接