有没有办法让git在切换到隐藏更改的分支时自动发出警告?
我正在寻找类似的东西:
$ git checkout my-branch
Switched to branch 'my-branch'
Stashed changes present: stash@{0}: WIP on my-branch: 836b45a My HEAD commit
这样我就不会忘记几天后回到项目时已经在分支机构开始的工作。
答案 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
之类的内容,则必须使用其他内容。