假设我的工作目录中有未提交的更改。我如何从这些补丁,而不必创建一个提交?


当前回答

我们还可以指定文件,只包括有相对变化的文件,特别是当它们跨越多个目录e.x时。

git diff ~/path1/file1.ext ~/path2/file2.ext...fileN.ext > ~/whatever_path/whatever_name.patch

我发现在答案或评论中没有说明这一点,这些都是相关的和正确的,所以选择添加它。明确的比含蓄的好!

其他回答

我们还可以指定文件,只包括有相对变化的文件,特别是当它们跨越多个目录e.x时。

git diff ~/path1/file1.ext ~/path2/file2.ext...fileN.ext > ~/whatever_path/whatever_name.patch

我发现在答案或评论中没有说明这一点,这些都是相关的和正确的,所以选择添加它。明确的比含蓄的好!

Git差异为非阶段的变化。

Git diff——用于阶段性更改的缓存。

对于阶段性和非阶段性的更改,git diff HEAD。

我喜欢:

git format-patch HEAD~<N>

其中<N>是最后一次提交保存为补丁的数量。

该命令的具体使用方法在DOC中

乌利希期刊指南 在这里你可以找到如何应用它们。

UPD对于那些没有理解format-patch的人 添加别名:

git config --global alias.make-patch '!bash -c "cd ${GIT_PREFIX};git add .;git commit -m ''uncommited''; git format-patch HEAD~1; git reset HEAD~1"'

然后在项目存储库的任意目录下运行:

git make-patch

该命令将创建0001- uncommitted。在当前目录打补丁。Patch将包含下一个命令可见的所有更改和未跟踪的文件:

git status .

如果你想做二进制,在运行git diff时给一个二进制选项。

uncomminetted

git diff --cached > name.patch

已提交(更有用)

git diff HEAD~commit_count > name.patch