如何将我的当前工作副本与存储区进行差异比较?
我的用例是:我的工作副本已经包含了我在 stash@{0}
中的一部分更改,但我不想应用所有在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 .
现在你已经使用存储的代码片段与脏工作树进行了比较,回到了最初的状态。如果你不提交或者存储你的工作副本,是无法完成这个操作的。存储可能是更低风险的选择:
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}
为了删除你仅为diffing创建的存储,使用git stash pop
或git stash drop stash@{0}
。git difftool -d stash@{3} stash@{0}
的内容,以查看两个感兴趣的存储区之间所有更改的目录差异。 - Eric Mutta我认为 OP 希望答案能够展示存储区除了工作副本中存在的文件之外还包含哪些差异。
以下命令可显示存储区包含的内容。
git stash show -p stash@{0}
git stash show -l
命令,它可以显示你想要的内容而不需要额外的存储或提交。-l
选项有效,但它在git help stash
中没有提到。它的文档在哪里? - Chris Pageerror: switch l requires a value
。 - Iker如果要比较工作目录中的文件或文件夹与存储区中的文件或文件夹的差异,可以执行以下操作:
git diff stash@{0} -- /path/to/fileorfolder
这里的 stash@{0}
只是代表一个提交哈希值,因此它的工作方式与 git diff
相同。 stash@{0}
只是一个处理程序。
git difftool --dir-diff --no-prompt stash@{0} -- /source/folder/path/here
。+1 - Eric Muttadiff <(git diff) <(git stash show -p stash@{0})
colordiff <(git diff) <(git stash show -p stash@{0})
^!
是什么意思吗?我以前没见过这个... - alpha_989是的,你可以使用 git stash show -p
,
查看此 Git diff against a stash 获取更多信息。
git diff HEAD stash@{0}
。 - Andy