Я потерял пропущенный (перечисленный в .gitignore) каталог, сохранив неотслеживаемые файлы и затем запустив pop.
У меня была куча изменений, объединенных в один коммит (большие участки кода перемещались в новые файлы, переупорядоченный код, однострочные изменения и т. Д.). Я хотел разделить их на несколько отдельных коммитов. Сначала я создал новую ветку и проверил ее, чтобы быть в безопасности. Я перешел на предыдущий коммит и использовал git add --patch
, чтобы пройти через все изменения и выборочно проиндексировать те, которые я хотел включить в первый новый коммит. Я также хотел включить пару новых файлов, которые я создал, поэтому мне пришлось добавить их тоже. Как только мой индекс отразил изменения, которые я хотел получить для первого нового коммита, я использовал git stash save --keep-index --include-untracked
, чтобы сохранить неиндексированные изменения и оставить только индексированные изменения в рабочем каталоге, чтобы я мог проверить их перед фиксацией. Как только я был доволен коммитом, я его фиксировал, выталкивал изменения из тайника и выборочно добавлял изменения для следующего нового коммита.
Теперь я несколько раз облажался. Во-первых, я забыл --include-untracked
в тайнике, поэтому в моем рабочем каталоге все еще были новые файлы, которые я не хотел. Я сразу понял и попытался git stash pop
, чтобы попытаться еще раз, но у меня возникли конфликты слияния. Я не был уверен, как правильно слить, что со всеми выборочно добавленными изменениями, поэтому я вернулся к мастеру, создал новую ветку и проверил ее, , надеясь, что все, что я облажался в первой новой ветке останется там (как я ошибался ...).
В следующий раз (после выборочного добавления снова, фу ...) я забыл добавить новые файлы, которые хотел включить в коммит, чтобы они были спрятаны. Я снова переключился обратно на мастер, сделал новую ветку и попробовал снова.
Я должен был сделать это по крайней мере 3 или 4 раза, прежде чем я "понял это правильно". Но когда я пошел тестировать свой код, он не смог найти один из входных файлов, которые я использовал. Файл находился в моем каталоге «ignore», который был указан в .gitignore. Когда я посмотрел, весь каталог отсутствовал . Я бросил туда множество вещей - файлы баз данных и т. Д. - я хотел сохранить их, но не отслеживать их изменения.
Итак, я посмотрел на свой git stash list
. В нем перечислено около 5 тайников, 4 из которых я только что создал, как описано выше. Я понял, что они не остались в своих ветках. Затем я попытался найти свой каталог игнорирования в тайниках. Я пытался вытолкнуть каждый из них, но продолжал сталкиваться с конфликтами слияний, и я никогда не был уверен, как их разрешить - когда я думал, что у меня есть, тайник все еще существует в списке, но, кажется, частично применяется. В итоге я попытался выскочить, а затем сбросить каждый тайник в списке, всегда ожидая появления моего потерянного каталога. Это не так.
Я следовал инструкциям на Как восстановить удаленный тайник в Git? , чтобы посмотреть мою историю в gitk, но, похоже, не смог найти мой отсутствующий каталог; ни один из перечисленных коммитов не имеет его в древовидном или патч-представлении, что может иметь смысл, поскольку он - это , который должен игнорировать его. В частности, я посмотрел на те, которые помечены WIP, но не играли в кости.
Я также пытался проверить каждую сделанную мной ветку, но безрезультатно.
Как мне отследить это? Он нигде не находится (без тайника), потому что он никогда не отслеживался. Я предполагаю, что он был удален с помощью тайника, но, возможно, я ошибаюсь. Как найти сброшенные тайники и выбрать правильный - могу ли я искать по содержимому? Когда я нахожу его, как заставить его применить без конфликтов?
Попытка обновления
$ git reflog --all
25b96f2 refs/heads/recover0@{0}: commit: trash
fbf987b refs/heads/recover0@{1}: commit: trash
de24fd2 refs/heads/tmp2@{0}: branch: Created from de24fd
78f64c9 refs/heads/fix0dot1@{0}: commit: temp commit d
6aaa987 refs/heads/tmp0@{0}: branch: Created from 6aaa987
6cab748 refs/heads/exp6@{0}: commit: trash
7cab1c1 refs/heads/tmp4@{0}: branch: Created from 7cab1c
bc60313 refs/heads/tmpA0@{0}: branch: Created from bc6031
38389f3 refs/heads/a1a@{0}: branch: Created from master
f01ca25 refs/heads/tmp5@{0}: branch: Created from f01ca2
0d59a2d refs/heads/tmp6@{0}: branch: Created from 0d59a2
43a9dc8 refs/heads/tmp7@{0}: branch: Created from 43a9dc
e8dd137 refs/heads/exp5@{0}: branch: Created from master
207bfea refs/heads/exp3@{0}: commit (amend): temp commit c
996a20b refs/heads/exp3@{1}: commit (amend): temp commit c
a1713f8 refs/heads/exp@{0}: rebase -i (finish): refs/heads/exp onto 7d5e666
09d03de refs/heads/exp@{1}: branch: Created from master
7d5e666 refs/heads/exp4@{0}: reset: moving to HEAD^
149c949 refs/heads/exp4@{1}: commit (amend): temp commit a
b4d9cbc refs/heads/exp4@{2}: rebase -i (finish): refs/heads/exp4 onto 75f8808
e8dd137 refs/heads/exp4@{3}: branch: Created from master
ec8afef refs/heads/exp6@{1}: reset: moving to HEAD^
7d5e666 refs/heads/exp6@{2}: reset: moving to HEAD^
38389f3 refs/heads/exp6@{3}: branch: Created from master
7e66c30 refs/stash@{0}: WIP on master: 662f5b9 fix #6: Print time used
f2e045e refs/heads/tmp8@{0}: branch: Created from f2e045
b780d56 refs/heads/tmp3@{0}: branch: Created from b780d5