Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

Git. Работа с заначкой (Stash)

#git


Добрый день!

Я сделал часть работы в ветке(условно old_branch). Далее мне понадобилось перенести
эту работу в другую ветку(условно new_branch). Так как работа не закончена, я не стал
комитить изменения, а воспользовался заначкой(stash)

$ git stash
$ git stash branch new_branch


У меня создалась новая ветка new_branch, в которую перенеслись мои незакомиченные
изменения. Все ОК.

Далее я вернулся на старую ветку и восстановил ее состояние до моих изменений

$ git checkout old_branch
$ git checkout -- .


Изменения откатились не только в старой ветке, но и в новой тоже (WTF?).
Понимаю что незакомиченные изменения потеряны навсегда, но есть ли способ восстановить
заначку из новой ветки?
    


Ответы

Ответ 1



У меня создалась новая ветка 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 Date: Fri Oct 6 12:46:55 2017 +0300 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 ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: file no changes added to commit (use "git add" and/or "git commit -a")

Комментариев нет:

Отправить комментарий