如何将我当前的工作副本与存储区进行比较?
我的用例:我的工作副本已经包含 my 中更改的子集,但stash@{0}
我不想应用. 我想做一个差异来帮助确定我的工作副本中仍然缺少哪些理想的更改。stash@{0}
stash@{0}
如何将我当前的工作副本与存储区进行比较?
我的用例:我的工作副本已经包含 my 中更改的子集,但stash@{0}
我不想应用. 我想做一个差异来帮助确定我的工作副本中仍然缺少哪些理想的更改。stash@{0}
stash@{0}
如果这是您最近的藏匿处,git diff stash@{0}
会这样做。如果没有,您可以使用git stash list
获取要比较的存储的索引。
要查看实际工作副本和存储之间的差异,您需要先提交它。然后,您可以回滚提交。
git add -A <- Add all the files
git commit -m "temp" <- commit them
git diff stash@{0}..HEAD <- diff the commit with your stash
git reset HEAD~ <- roll your commit back
如果您的工作树是脏的,您可以通过首先提交脏工作树,然后将其与存储进行比较,将其与存储进行比较。之后,您可能希望撤消工作树的提交(以保持历史记录干净)。
提交你肮脏的工作树:
git add .
git commit -m "Dirty commit"
使用该提交来区分存储:
git diff stash@{0}
然后,之后,您可以恢复提交,并将其放回工作目录:
git reset --soft HEAD~1
git reset .
现在你已经用你的 stash 区分了肮脏的工作树,并回到了你最初的位置。
如果不提交或存储您的工作副本,您将无法执行此操作。藏匿可能风险较低:
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
or git stash drop stash@{0}
。
如果您想改用提交,请参阅@Magne 的回答。
我认为 OP 希望得到答案,看看除了工作副本中存在的文件之外,stash 还包含什么不同。
以下命令显示了 stash 包含的内容。
git stash show -p stash@{0}
您可以使用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})
当然,您可以将 stash@{0} 更改为您想要的任何存储。此命令实际上是将实际工作目录 (git diff) 与您的一个存储进行比较。
更新
您还可以安装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 与 stash以获取更多信息。