Проверьте, что "git stash" спрятал что-нибудь

У меня есть команда Windows script, предназначенная для объединения ветки dev в ветку проекта. Он начинается с чтения текущего имени ветки, смены изменений, выбора и слияния ветвей dev и project, затем переключается обратно в исходную ветвь и выталкивает тайник.

Проблема в том, что не может быть никаких изменений в stash. Это оставляет предыдущий тайник в верхней части стека. Когда он доходит до конца script и выталкивает тайник, он выталкивает предыдущий тайник, который не связан с текущей ветвью.

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 stash или Git status, чтобы определить, нужно ли мне всплывать тэг?

Ответ 1

git stash позволяет вам предоставить сообщение. Вы можете использовать сгенерированный токен в качестве сообщения, чтобы вы знали, что он не будет конфликтовать с другими сообщениями git.

Затем, когда вы хотите проверить, следует или нет, просто проверьте, содержит ли вывод git stash list ваш токен. Если это так, всплывает.

Ответ 2

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

Ответ 3

Вы можете git diff и проверить вывод.

  • Если его нет, то нет ничего для stash.
  • Если есть вывод, то вы можете grep проанализировать его для конкретных вещей, которые вам нужны.

Любая проблема с этой стратегией?

Ответ 4

В Linux вы можете использовать git stash list | wc -l, чтобы подсчитать количество записей закладок. Если не было ничего, чтобы сохранить, то это возвращает то же самое до и после вашего фактического git stash. Я не уверен, что вы можете использовать это в Windows, хотя.