Итак, у меня были некоторые неустановленные изменения и некоторые поэтапные. Я выпустил
Welcome to Git (version 1.8.3-preview20130601)
$ git stash save --keep-index
Saved working directory and index state WIP on master: ab0d18d Setup of alarms f
or network service + Logging exceptions + long arithmetic
HEAD is now at ab0d18d Setup of alarms for network service + Logging exceptions
+ long arithmetic
$ git stash
Saved working directory and index state WIP on master: ab0d18d Setup of alarms f
or network service + Logging exceptions + long arithmetic
HEAD is now at ab0d18d Setup of alarms for network service + Logging exceptions
+ long arithmetic
Затем я нажимаю "Изменить последний фиксатор" в gui, чтобы разделить фиксацию ab0d18d на более мелкие. Я отключил некоторые файлы, и я нажал
$ git stash save --keep-index
Saved working directory and index state WIP on master: ab0d18d Setup of alarms f
or network service + Logging exceptions + long arithmetic
HEAD is now at ab0d18d Setup of alarms for network service + Logging exceptions
+ long arithmetic
Повторите описанную выше процедуру:
$ git stash save --keep-index
Saved working directory and index state WIP on master: ab0d18d Setup of alarms f
or network service + Logging exceptions + long arithmetic
HEAD is now at ab0d18d Setup of alarms for network service + Logging exceptions
+ long arithmetic
Затем я отредактировал сообщение фиксации, и я сделал. Затем я выпустил git stash pop
, чтобы начать возвращать мои штампы и фиксировать их один за другим.
$ git stash pop
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# TODO.txt
nothing added to commit but untracked files present (use "git add" to track)
Dropped refs/[email protected]{0} (43facd88ea3548071b196324523bd017d680d6dd)
Бедствие!
У меня были резервные копии с радостью (длинный live dropbox)
2 вопроса:
- Что я сделал не так?
- Как можно оправиться от такого сценария?
EDIT: gitk после того, как я восстановил изменения (измененная фиксация - SETUP ALARMS)
ИЗМЕНИТЬ
Нашел способ воспроизвести проблему - будет ее корректировать (возможно, нужна только последняя часть - пыталась точно воспроизвести мой оригинальный сценарий), но для начинающих:
mkdir test_stash; cd test_stash;git init
echo f1 >> f1 ; echo f2 >> f2 ; echo f3 >> f3 ; echo f4 >> f4 ; echo f5 >> f5
git add f1 f2 f3 f4 f5
git commit -m base123
echo change f1 to be amended >> f1
echo change f2 to be amended >> f2
echo change f3 to be amended >> f3
git add .
git commit -m tobeamended123
echo change f4 >> f4; git add f4
echo change f5 >> f5
git stash save --keep-index
git stash
git gui &
Теперь удалите команду fix commit в gui. Не уверен, какая команда ему соответствует, но git commit --amend
не выполняет трюк.
В то время как в файле состояния изменения состояния f3 в gui снова (щелкните по нему, чтобы он перемещался по не прошедшей стадию области - был бы git reset HEAD f3
, но это тоже не работает), затем
git stash save --keep-index
git commit -m amended # not really amended - a new commit altogether
git stash pop
Получение:
# # On branch master
nothing to commit, working directory clean
Dropped refs/[email protected]{0} (898687d73b65ccc9e10cd826bc12fda1a4759651)
Ожидание: изменения f3 для отображения