Git stash用未跟踪文件修补

时间:2014-04-02 16:58:03

标签: git

如何使用未跟踪的文件制作Git存储,将其推送到补丁并在另一台计算机中恢复。

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

但路径没有未跟踪文件

1 个答案:

答案 0 :(得分:16)

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

使用-u-a(或其他拼写)会创建three-commit stash bag。第三个提交包含(仅)未跟踪(-u)或未跟踪和忽略/"所有" (-a)个文件,即省略所有跟踪的文件。

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

  • 对已跟踪文件的更改:git stash show -p(目前为止),以及
  • 第三次提交的全部内容,作为补丁。

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

git diff 4b825dc642cb6eb9a060e54bf8d69288fbee4904 stash^3

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

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

(请参阅上面的最后一个链接,了解如何避免对空树的幻数进行硬编码。另外,如果您只想查看 u提交,请使用{ {1}}:git show,例如。)