c - 如何用 git 处理这个补丁问题?

标签 c linux git

我目前正在使用 git 进行一个项目。基本上,我的 git 树由三个分支组成:

  • Branch A :原始分支,从中派生出我的工作。
  • 分支B:基于A的分支。 B 包含开发工作(A 的新功能)。
  • 分支 C:出于时间管理的原因,我还开始为新功能开发不完整的实验选项。本实验代码直接添加到B中。所以CB的清理分支,只保留完全可操作的代码。

分支关系可以这样表示:

A head-> B -> commit 0 -> ... -> commit n -> C -> clean up commit

分支 B 包含所有新功能的代码,有时与仍在开发中的可选部分混合在一起。 C 中的所有提交都是实验部分的删除。

分支 C 中的代码是干净的,我想从中伪造一个补丁。补丁应该包括从 C 的最后一次提交到 A 的头部的所有更改。

如果我执行 git format-patch master --stdout > my_patch.patch,这会生成一个补丁,该补丁将在操作代码中有效结束。但这并不好,因为在补丁中,实验代码被添加(通过 B 中的一些提交)然后被删除(清理 C 中的提交)。除了一点也不聪明,这还包括无用的额外空间(这意味着额外的邮件与社区共享补丁)和应用程序的额外开销。

我应该如何操作这些分支来产生一个干净的补丁?请注意,我想保留到目前为止在分支 B 中所做的实验工作,我只是不想将其包含在补丁中。

最佳答案

git checkout C              # alternately, do "git checkout -b C_NEW" for safety
git rebase --interactive A  # Your A branch

它将调出一个编辑器。将除第一个以外的所有“pick”文本更改为“s”。这会将您的所有提交“压缩”为一次提交。

您也可以使用 cherry-pick(将一些提交提取到 A)或 git rebase --interactive(并删除所有 B 提交以获得 C)。

关于c - 如何用 git 处理这个补丁问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15897005/

相关文章:

c++ - 如何使用 DSP 加速 OMAP 上的代码?

检查 C 中的 long long 溢出

python - 如何在 Python 中正确解析 Git 命令 (`git log ...` )?

git 清理旧分支

克隆 Git 存储库时,GIT 无法生成 askpass No such file or directory

c - 为什么我的数组在作为参数传递时被删除?

c - 来自 fputc 的 EOF 是否总是意味着 ferror 返回 true?

c - 是 sigsegv 的模棱两可的行为

c++ - "to_string"是 't a member of "标准”?

linux - Raspbian 上的 Mono 和 MongoDB