首页 文章

Git diff对付藏匿处

提问于
浏览
1044

如何才能看到取消对当前工作树的更改?我想知道在应用它们之前会做出哪些改变!

11 回答

  • 256

    查看最新的藏匿处:

    git stash show -p
    

    看到任意藏匿:

    git stash show -p stash@{1}
    

    git stash 联机帮助页:

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

  • 0

    要查看最近的藏匿信息:

    git stash show -p
    

    要查看任意存储:

    git stash show -p stash@{1}
    

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

    您可以使用:

    git diff stash@{0} master
    

    查看与分支主数据相比的所有更改 .

    或者您可以使用:

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

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

  • 33

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

    git diff stash@{0}^!
    

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

  • 15

    If your working tree is dirty ,您可以通过先提交脏工作树,然后将其与存储进行比较,将其与存储进行比较 . 之后,您可以使用脏工作树撤消提交(因为您可能不希望在提交日志中具有该脏提交) .

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

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

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

  • 1

    这对git版本1.8.5.2适用于我:

    git diff stash HEAD
    
  • 1443

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

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

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

    "But what if I don't have any current work?" 然后你处于正常无聊的情况 . 只需使用@ Amber的答案

    git stash show
    

    或@ czerasz的回答

    git diff stash@{0}
    

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

    git stash apply
    git diff
    git reset
    git checkout
    
  • 9

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

    git difftool stash HEAD
    
  • 0

    FWIW 这对所有其他答案来说可能有点多余,并且与接受的答案非常相似;但也许它会帮助别人 .

    git stash show --help 会给你所需要的一切;包括藏匿显示信息 .

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

  • 17

    在不移动任何东西的情况下执行此操作的一种方法是利用 patch 可以读取git diff的事实(基本上统一差异)

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

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

  • 82

    结合我在这个线程和this one中学到的东西,当我想看到"what is inside the stash"时,我首先运行:

    git stash show stash@{0}
    

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

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

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

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

    ...
    [diff]
        tool = meld
    
  • 2

    她藏匿的名单

    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 consider the current code in your branch and show just show what you will apply

    您可以使用:

    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 pop 并使用 git stash applygit stash drop 的组合如果你在错误中应用藏匿分支......有时很难恢复你的代码 .

相关问题