Git diff对付藏匿处

问题描述 投票:1138回答:12

如何查看存储中的更改将对当前工作树进行更改?我想知道在应用它们之前会做出哪些改变!

git git-stash
12个回答
1671
投票

查看最新的藏匿处:

git stash show -p

看到任意藏匿:

git stash show -p stash@{1}

来自git stash联机帮助页:

默认情况下,该命令显示diffstat,但它将接受git diff已知的任何格式(例如,git stash show -p stash @ {1}以查看补丁形式的第二个最近的存储)。


1
投票

FWIW这可能对所有其他答案都有点多余,并且非常类似于接受的答案;但也许它会帮助别人。

git stash show --help将为您提供所需的一切;包括藏匿显示信息。

显示[<stash>]

将存储中记录的更改显示为存储状态与其原始父项之间的差异。如果没有给出,则显示最新的一个。默认情况下,该命令显示diffstat,但它将接受git diff已知的任何格式(例如,git stash show -p stash @ {1}以查看补丁形式的第二个最近的存储)。您可以使用stash.showStat和/或stash.showPatch配置变量来更改默认行为。


1
投票

没有移动任何东西的一种方法是利用qazxsw poi可以读取git diff(基本上统一差异)的事实

patch

这将向您显示通常会执行哪些修补程序的分步预览。这样做的另一个好处是补丁不会阻止自己将补丁写入工作树,如果由于某种原因你真的需要git来关闭提交 - 修改之前,继续并删除--dry-运行并遵循详细说明。


0
投票

她藏匿的名单

git stash show -p | patch -p1 --verbose --dry-run

所以得到藏匿号并做:

你可以做:

git stash list 
stash@{0}: WIP on feature/blabla: 830335224fa Name Commit
stash@{1}: WIP on feature/blabla2: 830335224fa Name Commit 2

但是如果你想要一个差异(这是显示存储的不同,这就是我写这个答案的原因. git stash show -p stash@{1} 考虑你的分支中的当前代码和Diff只显示你将应用的内容)

您可以使用:

show

要么

git diff stash@{0}

另一个有趣的事情是:

git diff stash@{0} <branch name>

这应用存储而不从列表中删除它,你可以git stash apply git stash apply stash@{10} 删除这些更改或如果你很高兴git checkout .从列表中删除存储。

从这里我从不建议使用git stash drop stash@{10}并使用git stash popgit stash apply的组合如果您在错误的分支中应用存储...有时很难恢复您的代码。


286
投票

要查看最近的藏匿信息:

git stash show -p

要查看任意存储:

git stash show -p stash@{1}

另外,我使用git diff来比较存储与任何分支。

您可以使用:

git diff stash@{0} master

查看与分支主数据相比的所有更改。 或者您可以使用:

git diff --name-only stash@{0} master

轻松查找仅更改的文件名。


90
投票

如果您的存储更改所基于的分支在此期间已更改,则此命令可能有用:

git diff stash@{0}^!

这将stash与它所基于的提交进行比较。


39
投票

如果您的工作树是脏的,您可以通过首先提交脏工作树,然后将其与存储进行比较,将其与存储进行比较。之后,您可以使用脏工作树撤消提交(因为您可能不希望在提交日志中具有该脏提交)。

您还可以使用以下方法来比较两个stashes(在这种情况下,您只需先弹出其中一个stashes)。

  • 提交你的脏工作树: git add . git commit -m "Dirty commit"
  • 使用该提交区分存储: git diff HEAD stash@{0}
  • 然后,之后,您可以还原提交,并将其放回工作目录中: git reset --soft HEAD~1 git reset .

现在你已经用你的藏匿处肮脏的工作树,并回到你最初的位置。


22
投票

@Magne的answer是唯一一个(非常晚)的日期,它回答了对这个问题的最灵活/最有用的解释,但它比必要的复杂得多。而不是提交和重置,只需存储您的工作副本,比较,然后取消暂停。

git stash save "temp"
git diff stash@{0} stash@{1}
git stash pop

通过暂时使您的工作文件夹更改成为存储堆栈的顶部(存储@ {0}),将原始顶部向下移动一个(存储@ {1},这向您显示存储堆栈顶部与工作文件夹之间的差异然后使用“新设置”位置中的原始顶部进行比较,以便您看到在当前工作之上应用它所带来的更改。

“但如果我目前没有工作怎么办?”然后你处于正常无聊的情况。只需使用@ Amber的答案

git stash show

或@ czerasz的回答

git diff stash@{0}

或者承认,无论如何都要快速轻松地存储和取消存储,只需解开更改并检查它们。如果您不希望它们暂时抛出(当前索引/工作文件夹更改)。完全是那个

git stash apply
git diff
git reset
git checkout

18
投票

这对git版本1.8.5.2适用于我:

git diff stash HEAD

9
投票

如果你有差异工具(比如无比)

git difftool stash HEAD

3
投票

为了以防万一,要比较工作树和存储库中的文件,请使用以下命令

git diff stash@{0} -- fileName (with path)

1
投票

结合我在这个线程和this one中学到的东西,当我想看到“什么是藏匿内容”时,我首先运行:

git stash show stash@{0}

这将显示修改了哪些文件。然后,为了在difftool中获得一个很好的视觉差异,我做:

git difftool --dir-diff stash@{0} stash@{0}^

这将显示针对其父级的给定存储的所有差异。

您可以在~/.gitconfig中配置diff工具,例如与Meld

...
[diff]
    tool = meld
© www.soinside.com 2019 - 2024. All rights reserved.