我在网上做了一些搜索。我知道你可以在提交后使用“format-patch”,但我的情况有点不同。
我想创建一个补丁,类似于 SVN 中的“dpk”,这样我就可以将它发送出去进行代码审查,但我还不想提交它。
我如何在 Git 中实现这一目标?
我在网上做了一些搜索。我知道你可以在提交后使用“format-patch”,但我的情况有点不同。
我想创建一个补丁,类似于 SVN 中的“dpk”,这样我就可以将它发送出去进行代码审查,但我还不想提交它。
我如何在 Git 中实现这一目标?
当其他人已经给出符合Git惯例的答案时,对于OP的问题“创建一个补丁而不提交”,也可以通过以下方式解决:
git diff > my_patch.txt
稍后你可以通过以下方式应用此补丁,而无需进行提交:
git apply my_patch.txt
但是,如果你只是在本地工作,使用git checkout another_branch -m
就足以将所有当前未提交的更改带到另一个分支,甚至不需要打补丁和应用。
git diff --staged > my_patch.txt
来包含它们。 - Vadim Kotovpatch
并不是魔法。如果您尝试将补丁应用于某些显着不同的代码,则自动合并可能会失败。即使在尝试合并两个非常不同的git分支时,也经常发生这种情况。您需要手动解决这个问题。 - RayLuo在不进行最后提交的情况下生成补丁的一般步骤:
使用命令
git commit -a -m "specific message"
注意:不要推送此提交。
生成补丁
git format-patch -s -n -1 HEAD
它将生成0001-.patch
撤销本地提交
git reset --soft HEAD~1
删除提交记录但保留您的工作
git reset --hard HEAD~1
删除您的工作提交
在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
进行比较。 - bfontainegit add --patch
- sigod就像@hammar所说,提交代码很便捷,你可以用git reset
等命令撤销提交。
你也可以将更改暂存,然后执行以下操作:
git stash show -p