【问题标题】:Creating a patch in git gives some headaches在 git 中创建补丁会让人头疼
【发布时间】:2014-12-11 06:48:55
【问题描述】:

我已经克隆了一个上游存储库,在上面启动了一个错误修复分支,并且花了很多时间摆弄它。由于我花了很多时间在分支上并对其进行了各种调试和微不足道的更改,因此我从最近的上游 master 分支了一个新分支,并到该分支,合并了我的实际的、最终确定的错误修复更改原始的错误修复分支,省略了杂乱无章的内容。

现在我想创建一个补丁,它只包含与最近上游主提交相关的更改。相关更改都在合并提交中,我将原始错误修复分支合并到新分支。

现在,当我跑步时

git format-patch master

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

git diff master

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

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

【问题讨论】:

  • 您通常不会尝试通过合并提交进行修复。你需要做 rebase,或者使用与合并提交相同的树创建新的提交,但只有一个父节点成为 master。
  • 我明白了。阅读此内容后:atlassian.com/git/tutorials/rewriting-history/git-rebase 我明白为什么这比我当前的工作流程更好。如果你把它写成答案,我会接受。

标签: git patch


【解决方案1】:

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

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

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

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

git reset --soft master
git commit 

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

【讨论】:

    猜你喜欢
    • 2022-10-08
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 2011-01-18
    • 1970-01-01
    相关资源
    最近更新 更多