我在网上做了一些搜索。我知道你可以在提交后使用format-patch,但我的情况有点不同。
我想创建一个补丁,类似于" dpk"在SVN中,所以我可以将其发送给代码审查,但我还不想提交它。
如何使用Git实现这一目标?
答案 0 :(得分:102)
当其他人已经给出一些符合git约定的答案时,OP的问题“创建一个没有提交的补丁”也可以用这种方式解决:
git diff > my_patch.txt
稍后您可以通过以下方式应用此修补程序:
git apply my_patch.txt
但是,如果您只是在本地工作,git checkout another_branch -m
足以将您当前的所有未提交更改带到另一个_branch,甚至无需修补和应用。
答案 1 :(得分:7)
生成补丁而不提交最终的一般步骤
使用
提交您的本地更改replaceAll()
注意:不要推送此提交。
生成补丁
git commit -a -m "specific message"
它将生成0001-.patch
恢复本地提交
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建议的那样,它可以让你更容易返回并在以后进行更改,而不必在推送之前在主分支中进行任何恼人的变基。