我通常跑步时:
git stash push --all
如果我没有任何修改,就没有东西被推到藏匿处。即使在这种情况下,是否也可以强制推送,以便git stash push --all && git stash pop
始终给出标识?
我问这个问题是因为在一些脚本中,我想stash push
,做一些事情,然后stash pop
,如果stash push没有创建新的stash,stash pop可能会弹出旧的和不相关的stash。另一种解决方案是从GitPython检测没有发生任何隐藏(我会说通过比较两个连续repo.git.stash("list")
的输出),但它也会使代码变得复杂。
谢谢你,谢谢!
3条答案
按热度按时间r8xiu3jd1#
git stash
的一般用途是存储您不想提交的更改数据,或者当您交换到另一个分支时返回此更改。如果你没有任何未提交的更改,你想如何隐藏一些东西呢?我觉得是你的行为有问题。获得相同结果的更简单方法是将仓库/分支状态重置为实际提交,然后存储弹出。我的意思是我会向你推荐这样的东西。git stash
-> do some stuff ->git reset --hard
(这会丢弃所有本地更改,但不会清除stash),然后使用git pop
获取“do some stuff”之前的状态。rsl1atfo2#
除了torek的评论之外,即使这不能解决我最初的问题,也足以解决我的问题:我想指出GitPython
repo.is_dirty(untracked_files=True)
的功能,它可以用来检查你是否有任何stash push --all
。这样我就可以保存这个值以供以后使用,如果我以前没有stash push --all
,就不做stash pop
。NB:到目前为止,它似乎工作,但也许我错过了一些重要的选项,在某些情况下可能有重要性,所以让我知道,如果是这样的话!
jmp7cifd3#
从这个意义上说,
git stash
并不是自动化友好的--当没有东西要隐藏时,它会默默地忽略操作。解决方法是始终在
git stash push
之前创建一些临时文件。幸运的是,即使文件列在.gitignore
中,它也能正常工作。我在脚本中使用以下安全机制: