在git中创建补丁令人头疼

时间:2014-10-16 02:35:29

标签: git patch

我克隆了一个上游存储库,在它上面启动了一个bug修复分支,花了很多时间来摆弄它。由于我花了很多时间在分支上并对其进行了各种调试和微不足道的更改,我从最近的上游主服务器分支了一个新的分支,并且到了该分支,合并了我的实际的,最终修复的错误修改原始的错误修复分支,留下了残余。

现在我想创建仅具有相对于最近上游主提交的相关更改的补丁。相关的更改都在合并提交中,我将原始的bug修复分支合并到了新的。

现在,当我跑

git format-patch master

其中master指向我分支较新修复分支的提交,它创建了多个补丁文件,其中包含来自原始bug修复分支的提交。我只想要单一,简洁的错误修复更改,就像我运行时获得的那些

git diff master

详细说明:问题不在于我获得了多个补丁文件。问题是这些补丁包含当前分支中不包含的各种调试更改等。

我应该怎么做才能创建一个合法的补丁?

1 个答案:

答案 0 :(得分:1)

git format-patch将为您提供的历史记录中的所有提交创建补丁。

清理未完成工作的正常git方法是使用交互式rebase,通过git rebase -i

另一种选择,如果你想以一个代表你所有工作的提交结束,那就是与git merge --squash进行压缩合并。

鉴于您当前的情况,如果您想保留合并提交的内容并创建一个新的提交,您可以尝试以下(假设您已签出到您的功能分支,并且它指向合并提交你创建了)

git reset --soft master
git commit 

这将为您提供一次更改提交,format-patch将按预期工作。