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

dog*_*lin 39 git patch

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

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

我怎样才能用Git实现这个目标?

Ray*_*Luo 111

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

git diff > my_patch.txt
Run Code Online (Sandbox Code Playgroud)

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

git apply my_patch.txt
Run Code Online (Sandbox Code Playgroud)

但是如果你只是在本地工作,那么git checkout another_branch -m就足以将所有当前的不允许更改带到另一个_branch,甚至没有补丁和应用.

  • 像这样我们不包括新的/未跟踪的文件!如果需要包含新文件,则应将所有文件添加到索引(git add),然后添加到$ git diff --cached> my_patch.txt (3认同)
  • 如果您想删除此应用的补丁: git apply -R my_patch.txt (2认同)
  • 这也不包括暂存文件。您需要运行git diff --staged> my_patch.txt以包括它们 (2认同)

小智 9

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

  1. 使用提交您的本地更改

    git commit -a -m "specific message"
    
    Run Code Online (Sandbox Code Playgroud)

    注意:不要推送此提交.

  2. 生成补丁

    git format-patch -s -n -1 HEAD   
    
    Run Code Online (Sandbox Code Playgroud)

    它会生成0001-.patch

  3. 恢复本地提交

    git reset --soft HEAD~1
    
    Run Code Online (Sandbox Code Playgroud)

    删除提交但保留你的工作

    git reset --hard HEAD~1
    
    Run Code Online (Sandbox Code Playgroud)

    删除你的工作提交


ham*_*mar 7

在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
Run Code Online (Sandbox Code Playgroud)

  • 没用.有时我想在提交之前看到本地更改,以便我可以捕获我不想提交的内容. (12认同)
  • 你可以为它做一个`git diff`. (5认同)
  • @Stephen`git add --patch` (3认同)

man*_*lds 6

就像@hammar说的那样,提交很便宜然后你就可以把提交git reset等等搞砸了.

你也可以藏匿然后做:

git stash show -p
Run Code Online (Sandbox Code Playgroud)