【问题标题】:How to create a patch without commit in Git如何在 Git 中创建不提交的补丁
【发布时间】:2012-03-21 18:34:23
【问题描述】:

我在网上做了一些搜索。我知道你可以在提交后使用 format-patch,但我的情况有点不同。

我想创建一个补丁,类似于 SVN 中的“dpk”,所以我可以将它发送出去进行代码审查,但我还不想提交。

如何使用 Git 实现这一点?

【问题讨论】:

  • 像 git 这样的 DVCS 的一个主要观点是根本没有理由避免提交某些事情。
  • 没有人回答这个问题。他没有问任何关于提交的问题。他问你如何制作可以分发给其他用户的补丁。
  • 您是否有理由不喜欢@RayLuo 的答案?如果您想在 after 提交后生成差异,您可能需要编辑您的标题;我绝对期待一个不同的公认答案。

标签: git patch


【解决方案1】:

当其他人已经给出了一些符合git约定的答案时,OP的问题“创建一个不提交的补丁”也可以这样解决:

git diff > my_patch.txt

稍后您可以通过以下方式应用此补丁,也无需提交:

git apply my_patch.txt

但如果您只是在本地工作,git checkout another_branch -m 足以将您当前的所有未提交更改带到另一个分支,甚至无需修补和应用。

【讨论】:

  • 如果你想删除这个应用的补丁:git apply -R my_patch.txt
  • 这样我们不包括新的/未跟踪的文件!如果需要包含新文件,则应将所有文件添加到索引(git add),然后添加到 $ git diff --cached > my_patch.txt
  • 这也不包括暂存文件。您需要运行 git diff --staged > my_patch.txt 以包含它们
  • @alper,patch 并不神奇。如果您尝试将补丁应用于某些显着不同的代码,则自动合并可能会失败。即使您尝试合并 2 个非常不同的 git 分支,同样的事情也会一直发生。你需要手动解决这个问题。
【解决方案2】:

在最后不提交的情况下生成补丁的一般步骤

  1. 使用

    提交您的本地更改
    git commit -a -m "specific message"
    

    注意:不要推送这个提交。

  2. 生成补丁

    git format-patch -s -n -1 HEAD   
    

    会生成0001-.patch

  3. 恢复本地提交

    git reset --soft HEAD~1
    

    删除提交但保留你的工作

    git reset --hard HEAD~1
    

    删除你的工作提交

【讨论】:

    【解决方案3】:

    在 Git 中提交是一种成本低廉且完全本地化的操作,因此只要您不将其推送到任何地方,就没有理由避免提交。

    只需创建一个新的本地分支并在那里提交您的更改。如果您不再需要该分支,您可以稍后随时删除它,或者您可以保留该分支并使用它来处理您正在做的任何事情,然后在准备好时将其合并(或变基)到主分支中。在使用 Git 时,这是一个很好的工作流程。

    $ git checkout -b feature-foo  # create and switch to new branch feature-foo
    $ git commit
    
    # do whatever you need to do
    
    $ git checkout master          # switch back to the master branch
    $ git merge feature-foo        # merge your change into master (optional)
    $ git branch -d feature-foo    # delete the branch
    

    【讨论】:

    • 没有帮助。有时我想在提交之前查看本地更改,以便我可以捕获我不打算提交的内容。
    • 你可以为此做一个git diff
    • @Stephen git add --patch
    【解决方案4】:

    就像@hammar 说的,commit 很便宜,然后你可以用git reset 等来清除commit。

    你也可以 stash 然后做:

    git stash show -p
    

    【讨论】:

      【解决方案5】:

      在 git 中对本地 repo 的提交不是“绑定”的。您可以提交您的更改,创建您的补丁,然后将您的分支软重置为上一次提交,就像您的提交从未发生过一样。

      话虽如此,您确实没有理由在创建补丁后重置您的分支。您可以将提交保留在 repo 中,并且在代码审查完成之前避免推送它。如果您必须返回并更改原始提交,那么您可以选择。

      如果您按照 hammar 的建议为提交创建一个分支,则可以更轻松地返回并稍后进行更改,而无需在推送之前在主分支中进行任何烦人的变基等。

      【讨论】:

        猜你喜欢
        • 2012-09-05
        • 1970-01-01
        • 2014-11-28
        • 1970-01-01
        • 2014-09-21
        • 2012-03-12
        • 1970-01-01
        • 2011-01-18
        • 2011-10-03
        相关资源
        最近更新 更多