如何在Git中创建没有提交的补丁

时间:2012-03-21 18:34:24

标签: git patch

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

我想创建一个补丁,类似于" dpk"在SVN中,所以我可以将其发送给代码审查,但我还不想提交它。

如何使用Git实现这一目标?

5 个答案:

答案 0 :(得分:102)

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

git diff > my_patch.txt

稍后您可以通过以下方式应用此修补程序:

git apply my_patch.txt

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

答案 1 :(得分:7)

生成补丁而不提交最终的一般步骤

  1. 使用

    提交您的本地更改
    replaceAll()

    注意:不要推送此提交。

  2. 生成补丁

    git commit -a -m "specific message"
    

    它将生成0001-.patch

  3. 恢复本地提交

    git format-patch -s -n -1 HEAD   
    

    删除提交但保留您的工作

    git reset --soft HEAD~1
    

    删除与您的工作的提交

答案 2 :(得分:6)

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

答案 3 :(得分:5)

就像@hammar说的那样,提交很便宜,然后你就可以用git reset等来破坏提交。

您也可以藏匿然后执行:

git stash show -p

答案 4 :(得分:0)

在git中提交本地repo不是“绑定”。您可以提交更改,创建补丁,然后在分支上执行软复位到先前的提交,这就像您的提交从未发生过一样。

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

如果你为提交创建一个分支,就像hammar建议的那样,它可以让你更容易返回并在以后进行更改,而不必在推送之前在主分支中进行任何恼人的变基。