Краткая версия этого вопроса такова: как я могу git
stash без автоматического слияния?
Теперь для более длинной версии...
Рассмотрим следующий игрушечный пример альтернативы git stash... + git pull... + git pop
.
Во-первых, git status
показывает, что единственное изменение в рабочем каталоге - это какой-то отслеживаемый файл foo
.
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: foo
#
no changes added to commit (use "git add" and/or "git commit -a")
Теперь, чтобы переустановить рабочий каталог в чистое состояние, в качестве предварительного условия для запуска git pull
, я временно переименую измененный файл foo
(на какое-то непроверенное имя) и восстановлю версию foo
в HEAD
...
% mv foo foo.$(date +%Y%m%dT%H%M%S)
% git checkout foo
% git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# foo.20130508T110014
nothing added to commit but untracked files present (use "git add" to track)
Хорошо, теперь я запускаю git pull
, который, для этого примера, мы можем предположить, что это ускоренная перемотка вперед:
% git pull
Наконец, я восстанавливаю временно переименованный foo
.
% mv foo.20130508T110014 foo
... и я вернулся к
% git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: foo
#
Это "моральный эквивалент" git stash save + git pull + git stash pop
, за исключением того, что первый, а не последний не застрахован от "конфликтов слияния", как этот:
% git stash save 'WIP'
% git pull
% git stash pop
Auto-merging foo
CONFLICT (content): Merge conflict in foo
Как мне повторить приведенную выше последовательность rename-checkout-pull-rename
, используя git stash save +... + git stash pop
, не вызывая автоматического слияния?
Кстати, подпрограмма rename-checkout-...-rename
более точно отражает то, что я ожидаю от команды stash
. Другими словами: сохраните состояние моего рабочего каталога сейчас и замените его позже. Там нет "слияния" в этой картине.