Git stash 以修补未跟踪的文件

标签 git

如何让 Git 存储未跟踪的文件,将其推送到另一台计算机上进行修补和恢复。

git stash save -u feature
git stash show -p > patch
git apply patch

但路径没有未跟踪的文件

最佳答案

一个普通的 git stash 创建一个 stash bag由两个提交组成:索引和工作树。

使用 -u-a(或它们的其他拼写)创建 three-commit stash bag .第三次提交(仅)包含未跟踪(-u)或未跟踪和忽略/“所有”(-a)文件,即它省略了所有跟踪文件.

如果您需要补丁的形式,诀窍是创建两个补丁:

  • 对跟踪文件的更改:git stash show -p(您目前拥有的),加上
  • 第三次提交的全部内容,作为补丁。

获取第二个项目符号项的最简单方法是 git diff 第三次提交针对空树。混帐always has an empty tree in every repository其 ID 是魔数(Magic Number) 4b825dc642cb6eb9a060e54bf8d69288fbee4904。因此,该树与 stash^3 之间的差异将包含一系列添加未跟踪文件的 git 补丁:

git diff 4b825dc642cb6eb9a060e54bf8d69288fbee4904 stash^3

然后您可以简单地将两个补丁 merge 为一个:

git stash show -p > patch
git diff 4b825dc642cb6eb9a060e54bf8d69288fbee4904 stash^3 >> patch

(请参阅上面的最后一个链接,了解避免对空树的魔数(Magic Number)进行硬编码的方法。此外,如果您只想查看 u 提交,使用 git show:例如 git show stash^3。)

关于Git stash 以修补未跟踪的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22818155/

相关文章:

当文件在移动后被显着修改时,Git 不会检测到重命名

linux - git推送突然失败(git-remote-https : relocation error)

node.js - 通过 NPM 安装私有(private)依赖项

git - Openshift 上的 Jenkins 无法克隆 repo

Gitlab:每个用户的搜索提交

Git repo : internal and open source external branches

git init 不会为我创建 git 目录

git - GitHub如何强制删除远程分支?

git push -u origin master 失败,遇到权限被拒绝的问题

git - 在功能分支上进行团队合作的最佳实践是什么?