假设我的工作目录中有未提交的更改。我如何从这些补丁,而不必创建一个提交?
当前回答
我喜欢:
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 .
其他回答
我们还可以指定文件,只包括有相对变化的文件,特别是当它们跨越多个目录e.x时。
git diff ~/path1/file1.ext ~/path2/file2.ext...fileN.ext > ~/whatever_path/whatever_name.patch
我发现在答案或评论中没有说明这一点,这些都是相关的和正确的,所以选择添加它。明确的比含蓄的好!
Git差异为非阶段的变化。
Git diff——用于阶段性更改的缓存。
对于阶段性和非阶段性的更改,git diff HEAD。
如果你还没有提交更改,那么:
git diff > mypatch.patch
但有时你正在做的部分工作是未跟踪的新文件,不会出现在你的git diff输出中。所以,做一个补丁的一种方法是为一个新的提交(git add每个文件,或只是git add .),但不做提交,然后:
git diff --cached > mypatch.patch
如果你想在补丁中添加二进制文件(例如mp3文件),可以添加'binary'选项:
git diff --cached --binary > mypatch.patch
您可以稍后应用补丁:
git apply mypatch.patch
要创建一个同时包含修改和新文件的补丁(阶段性),您可以运行:
git diff HEAD > file_name.patch
如果你想做二进制,在运行git diff时给一个二进制选项。
推荐文章
- 如何获得我的代码的最新版本?
- 如何在git中找到原始/master的位置,以及如何更改它?
- Bower: ENOGIT Git未安装或不在PATH中
- Bitbucket上的Git:总是要求密码,即使上传了我的公共SSH密钥
- Git别名-多个命令和参数
- 如何添加一个“打开git-bash这里…”上下文菜单到windows资源管理器?
- 是否可以在Git中只提取一个文件?
- 当我做“git diff”的时候,我怎么能得到一个并排的diff ?
- 在git中如何将提交移动到暂存区?
- 如何缩小。git文件夹
- 如何在本地删除分支?
- 找到包含特定提交的合并提交
- Windows上Git文件的权限
- 如何从一个枝头摘到另一个枝头
- 如何获得在两次Git提交之间更改的所有文件的列表?