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

时间:2015-11-08 16:31:32

标签: git git-stash git-checkout git-config

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

我正在寻找类似的东西:

$ git checkout my-branch
Switched to branch 'my-branch'
Stashed changes present: stash@{0}: WIP on my-branch: 836b45a My HEAD commit

这样我就不会忘记几天后回到项目时已经在分支机构开始的工作。

3 个答案:

答案 0 :(得分:4)

分公司没有“藏匿”。

存储只是一个补丁列表,您可以在任何地方应用。

  

如何将警告附加到更像分支中立的命令,如git status呢?

你有commit 2414b45(git 1。6。4,2009年6月)

  

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

     

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

     

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

所以试试:

export GIT_PS1_SHOWSTASHSTATE=1 # Unix
set GIT_PS1_SHOWSTASHSTATE=1 # Windows

git stash最初是由Nanako Shiraishi在commit f2c66ed(git 1.5.3,2007年6月)的git中添加的。

这只是一个非常新近的git(2.4.2,2014年4月,commit ed178ef)试图显示警告,仅针对您当前的索引(无论您当前的分支):

Cannot apply stash: Your index contains uncommitted changes.
  

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

     

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

     

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

这在commit 1937610(git 2。4。6,2015年6月)中得到了回复。

答案 1 :(得分:3)

不,那是不可能的,仅仅因为在Git中存储的更改与分支无关。即您可以在分支 A 上轻松stash未提交更改,并在分支 B 时使用stash pop。在这种情况下,您可能需要解决冲突,但它仍然证明存储对于存储库是全局的,而不是分支的本地存储。

另请参阅问题Is git stash branch-specific or for the whole repository?Why isn't the git stash unique per branch?

答案 2 :(得分:1)

为此使用一些bash怎么样?

您可以添加~/.bashrc之类的内容:

gco() {
    git checkout $@
    local CURRENT_BRANCH=$(git branch | grep '*' | awk '{ print $2 }')
    git stash list | grep $CURRENT_BRANCH
    if [ $? -eq 0 ]; then
        echo Hello! The current branch has stashed content!
    fi
}

注意:别名优先于函数。确保gco首先是unaliased。

如果which gco显示gco: aliased to git checkout之类的内容,则必须使用其他内容。