如何将我当前的工作副本与存储区分开来?
我的用例:我的工作副本已经包含了我的stash@{0}
中的一部分更改,但我不想在stash@{0}
中应用所有更改。我想做一个差异来帮助确定我的工作副本中仍然缺少stash@{0}
中哪些可取的变化。
如果这是你最近的藏匿,git diff stash@{0}
会这样做。如果没有,您可以使用git stash list
获取要与之比较的存储的索引。
我认为OP希望得到答案,看看除了工作副本中存在的文件之外,存储包含的区别。
以下命令显示存储包含的内容。
git stash show -p stash@{0}
如果您的工作树是脏的,您可以通过首先提交脏工作树,然后将其与存储进行比较,将其与存储进行比较。之后,您可能希望撤消工作树的提交(以保持历史记录清洁)。
git add .
git commit -m "Dirty commit"
git diff stash@{0}
git reset --soft HEAD~1
git reset .
现在你已经用你的藏匿处肮脏的工作树,并回到你最初的位置。
如果没有提交或存储工作副本,则无法执行此操作。存储可能风险较低:
git add -A # Stage all changes in your working copy.
git stash save --keep-index # Stash your working copy and leave it intact
git diff stash@{0} stash@{1}
为了摆脱你刚刚为了差异而制造的藏匿,使用git stash pop
或git stash drop stash@{0}
。
如果您想使用提交,请参阅@Magne's answer。
你可以使用git stash show -l
。它显示了你想要的东西,没有额外的藏匿或提交。
要使用存储在工作目录中的文件或文件夹的差异,您可以执行以下操作:
git diff stash@{0} -- /path/to/fileorfolder
这里stash@{0}
只代表一个提交HASH,所以它的工作原理与git diff
一样。 stash@{0}
只是一个处理程序。
您可以将Unix diff命令与两个Git命令结合使用,如下所示:
diff <(git diff) <(git stash show -p stash@{0})
当然,您可以将存储@ {0}更改为您想要的任何存储。这个命令实际上是将实际工作目录(git diff)与你的一个存储器进行比较。
UPDATE
您还可以安装colordiff并查看更好的结果:
安装:
然后只需将命令更改为:
colordiff <(git diff) <(git stash show -p stash@{0})
不确定OP想要什么,但我用它来看看藏匿的实际差异集是什么:
git difftool stash@{0}^!
要么
git diff stash@{0}^!
要么
git diff stash@{0}^! > patchfile
是的你可以使用git stash show -p
,查看这个Git diff against a stash获取更多信息。