如果我的工作目录中有未提交的更改,我怎样可以制作补丁而不必创建提交记录呢?
git diff > mypatch.patch
但有时候你正在做的工作中,一些内容是新的文件,没有被追踪,也不会显示在你的git diff
输出中。因此,一种制作补丁的方式是将所有东西都暂存为一个新的提交 (git add
每个文件,或只使用 git add .
),但不进行提交,然后执行以下操作:
git diff --cached > mypatch.patch
git diff --cached --binary > mypatch.patch
您可以稍后应用此补丁:
git apply mypatch.patch
git diff --no-color
。否则,看起来像是一个编码问题。 - jcarballogit diff --staged > mypatch.patch
,因为 --staged
是 --cached
的同义词。我认为这更容易记住。 - matthaeusgit diff
用于比较未暂存的更改。
git diff --cached
用于比较已暂存的更改。
git diff HEAD
用于比较已暂存和未暂存的更改。
git format-patch
命令也包含二进制差异和一些元信息。实际上,这是创建补丁的最佳选择,但据我所知,这仅适用于已经检入的源代码/更改,对吗? - Ericgit diff --relative
命令。 - ejboygit diff
和 git apply
可以用于文本文件,但无法用于二进制文件。
你可以轻松地创建一个完整的二进制补丁,但需要创建一个临时提交(commit)。一旦你创建了临时提交,就可以使用以下命令来创建补丁:
git format-patch <options...>
制作完补丁后,请运行此命令:
git reset --mixed <SHA of commit *before* your working-changes commit(s)>
这将撤销您的临时提交。最终结果是保留您的工作副本(故意地)带有与原始更改相同的未提交更改。git reset --mixed <补丁之前提交的SHA>
。要创建一个包含修改和新增文件(已暂存)的补丁,您可以运行以下命令:
git diff HEAD > file_name.patch
git diff --cached > mypatch.patch
不起作用。 - miningfile_name.patch
文件能否被 patch
命令使用?它们是否兼容? - Rakshith Ravigit diff HEAD > file-name.patch
创建的补丁,例如:patch --forward --strip=1 < file-name.patch
。 - whyergit format-patch HEAD~<N>
其中<N>
是要保存为补丁的最后几个提交的数量。
如何使用该命令的详细信息在DOC中。
更新 当从顶级Git目录调用GIT_PREFIX时修复的解释
更新
在这里你可以找到如何应用它们。
更新 对于那些没有理解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-uncommited.patch
的补丁文件。该补丁文件将包含所有的更改和未跟踪的文件,这些文件将在下一个命令中可见。git status .
git config --global alias.make-patch ....
- Eugen Konkov../folder
这样的路径,所以它并不仅限于在当前工作目录下执行。 - luckydonaldgit diff
时加上--binary
选项。git diff ~/path1/file1.ext ~/path2/file2.ext...fileN.ext > ~/whatever_path/whatever_name.patch
未被注释的
git diff --cached > name.patch
已提交(更加有用)
git diff HEAD~commit_count > name.patch