检查是否" git stash"藏了什么

时间:2014-07-01 23:40:44

标签: git batch-file git-stash

我有一个Windows Command脚本,旨在将 dev 分支合并到项目分支中。它首先读取当前分支名称,存储更改,获取和合并开发和项目分支,然后切换回原始分支并弹出存储。

问题是存储可能没有任何变化。这使得先前的存储位于堆栈的顶部。当它到达脚本的末尾并弹出存储时,它会弹出与当前分支无关的上一个存储。

Set SourceBranch=dev
Set ProjectBranch=project

:: Stash current changes.
For /F "tokens=1,2" %%a In ('Git branch -q') Do If "%%a"=="*" Set CurrentBranch=%%b
Git stash save -u

:: Pull latest source branch.
Git checkout %SourceBranch%
Git pull
For /F "tokens=1,3" %%a In ('Git branch -q -v') Do If "%%a"=="*" Set MergeHash=%%b

:: Merge source into project branch.
Git checkout %ProjectBranch%
Git pull
Git merge --commit %MergeHash%||Exit 1

:: Return to original branch.
Git checkout %CurrentBranch%
Git stash pop

如何从Git stashGit status获取反馈,以确定是否需要弹出藏匿处?

4 个答案:

答案 0 :(得分:24)

git stash允许您提供消息。您可以使用生成的令牌作为消息,以便您知道它不会与其他git存储消息冲突。

然后,当您想要检查是否要弹出时,只需检查git stash list输出是否包含您的令牌。如果是这样,请弹出藏匿处。

答案 1 :(得分:10)

git stash list #get a listing of all stashes to parse
git stash show -p stash@{0} #replace 0 with number of relevant stash from list

答案 2 :(得分:0)

您可以stash并检查输出。如果没有,则/Code Postal:/ { match($0, /Code Postal: *([0-9][0-9])/, result); dept = result[1]; } /^Tél/ { $2 = dept } { print } 没有任何内容。该策略有任何问题吗?

答案 3 :(得分:0)

在Linux上,您可以使用git stash list | wc -l来计算存储条目的数量。如果没有任何东西需要藏匿,那么这将在您的实际git stash之前和之后返回相同的内容。我不确定你是否可以在Windows上使用它。