git - 在 Git 中 merge 后如何重新格式化补丁?

标签 git merge format-patch

假设有两个分支,masterslave,它们编辑同一个文件和同一行。最初,文件的内容是

foo bar

然后在分支slave中编辑成

foo bar baz

现在分支slave的用户格式化补丁(git format-patch master)发送给分支master的用户.同时,在分支master中编辑同一个文件,变成

foo bar spam eggs

补丁打不开,master请求slave merge 打新补丁。当 master merge 到 slave 并且冲突解决后,就该重新格式化补丁了。提交图如下所示:

slave:               master:

foo bar baz spam eggs
    |             \
    |              \
    |                foo bar spam eggs
    |                    |
foo bar baz              |
       \                 |
        \                |
         +---------  foo bar

slave 上的最新提交( merge )看起来像:

@@@ -1,1 -1,1 +1,1 @@@
- foo bar baz
 -foo bar spam eggs
++foo bar baz spam eggs

但是,如果我们现在运行 git format-patch master,我们仍然会得到与之前完全相同的补丁,它没有考虑 merge 和冲突解决:

@@ -1 +1 @@
-foo bar
+foo bar baz

如何格式化适用于最新母版的补丁?我想在没有 rebase 的情况下做到这一点。

更新:git format rev1..rev2,其中rev1rev2mastercustom 分别分支,不包括与解决冲突相关的更改。 git-diff 格式化一个有效的补丁,但忽略提交消息。

最佳答案

为什么要使用补丁?您应该在 repo 协议(protocol)之间推 pull 。

merge 不是你可以从中制作补丁的东西。它只会跟随第一个 parent 。您可以通过使用 git diff 和 patch 格式,同时指定要区分的 2 个不同提交来获得您想要的内容。

希望这对您有所帮助。

关于git - 在 Git 中 merge 后如何重新格式化补丁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6392425/

相关文章:

git - repo 克隆时清空 Git 子模块文件夹

从 Visual Studio Team Service 导入 GitHub 存储库不起作用,为什么?

r - 合并r中具有相同行名的2个数据帧

python - 要合并的大文件。如何防止 Pandas 合并中的重复项?

git - 如何 'git-am' 应用使用 'git-format-patch --no-prefix' 创建的补丁?

git - 将远程分支 pull 入具有不同名称的本地仓库?

Git 推送到错误的分支

r - 使用匹配填充数据框后的因子级别问题

Git:生成在 "feature"分支上进行的所有提交的补丁,而不引用提交 ID

svn - Git 格式补丁与 svn 兼容?