Какова цель создания git stash и магазина git stash?
Из документации в git-scm есть две команды git stash, которые указывают на важность сценариев, но не для общего использования:
Создайте
Создайте stash (который является обычным объектом фиксации) и верните его имя объекта, не сохраняя его нигде в пространстве имен ref. Это предназначено для использования в скриптах. Это, вероятно, не та команда, которую вы хотите использовать; см. "сохранить" выше.
магазин
Храните заданный кошелек, созданный с помощью git stash create (который является обманывающим слиянием) в stash ref, обновляя stash reflog. Это предназначено для использования в скриптах. Это, вероятно, не та команда, которую вы хотите использовать; см. "сохранить" выше.
Предположим, что мы рассматриваем контекст автоматизированных скриптов, какие преимущества git stash create
git stash store
и git stash store
дают мне возможность git stash save
обычную git stash save
и друзей?
Ответы
Ответ 1
Вы можете использовать git stash create
когда пишете скрипты, которые нужно хранить в качестве детали реализации, и вы не хотите нарушать блокировку пользовательского тайника.
В зависимости от того, что произойдет дальше, вы можете (в случае ошибки, скажем) решить, что вы действительно хотите повредить stash reflog, после чего вы можете использовать git stash store
.
Очевидно, что регулярный тайник может быть реализован с точки зрения create
, а затем store
, но я также могу предположить, что он используется в гипотетической команде update-branch
которая делает что-то вроде этого:
git stash create
git fetch
git rebase
git stash apply
Ответ 2
К сожалению, хороший пример, показанный выше, не работает во всех случаях, потому что:
-
Если есть какие - то локальные изменения git stash create
будет создать без ссылок совершить, но это не будет фактически очистить локальные изменения.
-
Если нет каких - либо локальных изменений, то он не будет создавать фиксацию вообще (как BlackVegetable указал). В этом случае мы не должны apply
в конце.
-
(И второстепенный: Андрей забыл сохранить и использовать идентификатор фиксации, созданный при create
.)
Имея это в виду, мне кажется, что использование должно быть таким:
# Save the local changes, keep a reference to them, and clear them
stashed_commit="$(git stash create)"
git reset --hard
# Do your thing
git fetch
git rebase
# If there were local changes, then restore them
if [ -n "${stashed_commit}" ]
then git stash apply "${stashed_commit}"
fi
Неплохо, если не сказать больше!
Увы. Это было бы намного проще, если бы я мог просто git stash save --allow-empty
сверху, а git stash pop
внизу.
Я хотел бы ошибаться. Пожалуйста, поправьте меня!