如何仅为已提交的文件生成diff补丁文件?

时间:2015-09-22 20:10:23

标签: git

说我在我当地的主分公司工作。我更改了文件A和文件B.但是文件B中的更改只是调试内容,我不想提交它们。所以我暂存文件A并运行git commit

现在我想针对origin / master生成一个补丁文件。但是,当我运行以下命令时,生成的修补文件包含我对文件A和B的更改。是否有办法为本地主服务器与origin / master中的当前提交的文件生成补丁? (仅包含我已提交给本地分支的更改的补丁)

git diff -M --full-index origin/master > ../diff.patch

3 个答案:

答案 0 :(得分:3)

 git format-patch -1 HEAD

假设您只想要最近的提交

答案 1 :(得分:1)

按照以下步骤,可能会有所帮助

  1. 执行git stash清除回购,即文件B修改将会消失。
  2. 生成补丁
  3. 使用git stash apply
  4. 从藏匿处加载文件B.
  5. 删除存储(可选但不需要存储对象)

答案 2 :(得分:1)

最简单,最明显正确的答案直接源于你在问题中的意图:

  

现在我想针对origin / master生成一个补丁文件。

如果你想要一个补丁,不管你做了多少次提交,只需将origin/master树与你当前的提交区分开来:

$ git diff -M --full-index origin/master HEAD

(我在此处添加了-M--full-index,因为您在示例命令中执行了此操作。请注意,您可以通过在{{3}中设置-M来使diff.renames = true成为默认值}}。)

如果您希望以git am处理的格式提交每次提交的修补程序,则可以使用git config settings。因为它是为了做这种事情而设计的,所以它需要一个单一的"他们有什么承诺"标识符,因此:

$ git format-patch origin/master

与以下内容相同:

$ git format-patch origin/master..HEAD

所以这些中的任何一个都可以互换使用。有关其他详细信息,请参阅git format-patch