Git:切换到已隐藏更改的分支时发出警告

zoo*_*ool 2 git git-stash git-config git-checkout

有没有办法让 git 在切换到已隐藏更改的分支时自动警告您?

我正在寻找类似的东西:

$ git checkout my-branch
Switched to branch 'my-branch'
Stashed changes present: stash@{0}: WIP on my-branch: 836b45a My HEAD commit
Run Code Online (Sandbox Code Playgroud)

只是为了让我不要忘记几天后回到项目时我已经在分支上开始的工作。

Von*_*onC 5

分支没有“藏匿处”。

stash 只是一个补丁列表,您可以将其应用到任何您想要的地方。

那么如何将警告附加到一个更分支中立的命令,比如 git status 呢?

您已提交 2414b45(git 1.6.4,2009年 6 月)

在 bash 提示中显示隐藏更改的存在。

当设置为非空值时$,在__git_ps1输出中添加“ ”以显示存在隐藏的更改GIT_PS1_SHOWSTASHSTATE

检查 stash 是否有条目的代码取自 'git-stash.sh'。

所以尝试:

export GIT_PS1_SHOWSTASHSTATE=1 # Unix
set GIT_PS1_SHOWSTASHSTATE=1 # Windows
Run Code Online (Sandbox Code Playgroud)

git stash最初由白石菜菜子在提交 f2c66ed(git 1.5.3,2007年 6 月)中添加到 git 。

只是最近的 git (2.4.2, Apr. 2014, commit ed178ef ) 试图显示警告,仅与您当前的索引有关(无论您当前的分支如何):

Cannot apply stash: Your index contains uncommitted changes.
Run Code Online (Sandbox Code Playgroud)

stash: 需要一个干净的索引才能应用

如果您在索引中暂存了内容并运行“ stash apply”,我们可能会遇到冲突并将新条目放入索引中。那时恢复到原始状态很困难,因为像“ git reset --keep”这样的工具会吹走任何上演的东西。我们可以通过在分阶段更改时拒绝申请来使这更安全。

我们有可能在这里提供更好的工具,因为“ git stash apply”应该只将冲突写入索引(因此我们知道任何第 0 阶段条目都可能很宝贵)。
但它是奇怪的鸭子;大多数“合并”命令将更新干净合并条目的索引,并且不值得更新我们的工具来支持这个不太可能感兴趣的用例(除此之外,我们仍然需要阻止“ stash apply --index”的脏索引,因为这种情况模棱两可)。

不过,这已在提交 1937610(git 2.4.6,2015年 6 月)中恢复。