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

Han*_*ood 27 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
Run Code Online (Sandbox Code Playgroud)

我如何从中获取反馈Git stashGit status确定是否需要弹出存储?

Str*_*ids 28

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

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

  • 我最喜欢这种方法。这是我最终使用的三行。`GIT_STASH_MESSAGE="${RANDOM}"` `git stash -m "${GIT_STASH_MESSAGE}"` `git stash 列表 | grep "${GIT_STASH_MESSAGE}" && git stash pop --index` (4认同)

Nei*_*man 11

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
Run Code Online (Sandbox Code Playgroud)

  • 这如何帮助我确定是否有任何东西被藏匿?如果没有变化,则不会隐藏任何内容,并且之前可能存在任意数量的隐藏内容。 (2认同)

小智 7

在 Linux 上,您可以使用git stash list | wc -l来计算 stash 条目的数量。如果没有任何东西可以藏匿,那么这将在您的实际git stash. 我不确定你是否可以在 Windows 上使用它。