Могу ли я предотвратить появление / применение git stash, если у меня есть какие-либо изменения в файле? - PullRequest
0 голосов
/ 26 марта 2019

Я нарушил свое собственное правило наличия более одного элемента в моем стеке git stash, и я git stash pop отредактировал два из них вместо одного.

Это означает, что у меня было два набора изменений, безконфликты, теперь это были неотслеживаемые изменения, которые я не могу легко разделитьпрежде чем продолжить?


1 Если бы были конфликты, я мог бы просто использовать сброс, как в На самом деле отменить git stash pop

1 Ответ

2 голосов
/ 26 марта 2019

Вы можете создать псевдоним для git stash pop или применить, который проверяет отличия от HEAD.

[alias]
    pop = !"f() { { git diff-index --quiet HEAD && git stash pop \"$@\"; } || echo \"Can't pop, you have local changes\"; }; f "
    apply = !"f() { { git diff-index --quiet HEAD && git stash apply \"$@\"; } || echo "Can't apply, you have local changes"; }; f"

Префикс с ! и перенос их в вызов функции f() { ... }; f ", позволяет передавать аргументына git stash pop и git stash apply.

Команда git diff-index --quiet HEAD вернет 0 или 1 в зависимости от того, есть ли локальные изменения, тогда ярлыки && и ||либо продолжайте работу с git stash pop / apply, либо выводите сообщение об ошибке.

Перенос первой части, которая использует ярлык &&, в фигурные скобки (так что это { a && b; } || c) предотвращает сообщение об ошибке, которое использует|| срабатывание ярлыка, когда всплывающее окно или применить не удается.

Затем вы можете использовать git pop для безопасного запуска git stash pop без вмешательства в другие изменения.

...