Добрый день!
Я сделал часть работы в ветке(условно old_branch). Далее мне понадобилось перенести эту работу в другую ветку(условно new_branch). Так как работа не закончена, я не стал комитить изменения, а воспользовался заначкой(stash)
$ git stash
$ git stash branch new_branch
У меня создалась новая ветка new_branch, в которую перенеслись мои незакомиченные изменения. Все ОК.
Далее я вернулся на старую ветку и восстановил ее состояние до моих изменений
$ git checkout old_branch
$ git checkout -- .
Изменения откатились не только в старой ветке, но и в новой тоже (WTF?).
Понимаю что незакомиченные изменения потеряны навсегда, но есть ли способ восстановить заначку из новой ветки?
Ответ
У меня создалась новая ветка new_branch, в которую перенеслись мои незакомиченные изменения.
нет, они не «перенеслись». просто была создана новая ветка, копия той, в которой была создана «заначка» (stash), т.е., создан новый указатель на тот же самый коммит, который был текущим во время создания «заначки», затем эта новая ветка была назначена текущей, к рабочему каталогу (working directory) были применены сохранённые в «заначке» изменения, а сама «заначка» была удалена.
раз вы сразу после этого выполнили команду checkout (с аргументом ), то изменения в рабочем каталоге были удалены
восстановить удалённую «заначку» теоретически можно (до проведения «сборки мусора»). пример:
$ git fsck --no-reflog
Checking object directories: 100% (256/256), done.
dangling commit 424c2946da3bfe5cbc719f808c1a006612e5cab7
найденный «подвисший» (dangling) коммит и является удалённой (мною) «заначкой». с этим хэшем можно манипулировать как с «обычной заначкой»:
$ git show 424c294
commit 424c2946da3bfe5cbc719f808c1a006612e5cab7
Merge: 3330f58 8a98560
Author: aleksandr barakin
WIP on master: 3330f58 20171006124552
diff --cc file
index abf3108,abf3108..e1743f8
--- a/file
+++ b/file
@@@ -1,1 -1,1 +1,2 @@@
2017-10-06 12:45
++2017-10-06 12:46
$ git stash show -p 424c294
diff --git a/file b/file
index abf3108..e1743f8 100644
--- a/file
+++ b/file
@@ -1 +1,2 @@
2017-10-06 12:45
+2017-10-06 12:46
$ git stash apply 424c29
On branch new
Changes not staged for commit:
(use "git add
modified: file
no changes added to commit (use "git add" and/or "git commit -a")
Комментариев нет:
Отправить комментарий