MyTetra Share
Делитесь знаниями!
Что происходит при откате изменений через git reset --soft
Время создания: 30.01.2018 13:41
Текстовые метки: git, reset, soft
Раздел: Компьютер - Программирование - Системы контроля версий (VCS) - Git
Запись: xintrea/mytetra_syncro/master/base/1517308889ag2ktwfweb/text.html на raw.github.com

Здесь записана попытка разобраться и понять, что происходит при выполнении команды git reset --soft.


git reset --soft <СтарыйКоммит>


А происходит нечто странное (все нижеперечисленные изменения произойдут в локальном репозитарии):



1. Состояние файлов в рабочей директории не откатывается до состояния на указанный старый коммит. То есть, в рабочей директории никакого отката кода не производится. (В интернетах утверждают, что состояние файлов должно сброситься до указанного коммита. Но тогда непонятно, как так у людей получается: в идексе (см. далее) будут изменения, которые приводят файлы старого коммита в состояние коммита, на котором программист затеял процедуру reset-a. А значит, файлы в рабочей директории действительно не должны измениться после команды сброса).


2. В индексе (stages) появляются изменения, которые производились начиная с коммита, до которого был произведен откат, и кончая HEAD каким он был до выполнения команды reset. В общем, в индексе появляется дельта изменений, которые пользователь хотел "откатить". Здесь неясно, какое направление сделано у этих изменений. Варианта два:


  1. Это изменения, которые будучи применимы к коммиту <СтарыйКоммит> приведут код в самое свежее состояние (от которого мы и хотим избавиться)
  2. Это изменения, которые будучи применимы к самому свежему коду, откатят его до состояния <СтарыйКоммит> .


документация не проливает свет на этот вопрос, потому он остается открытым. По коственным данным, эти изменения больше похожи на вариант 1. Но тогда непонятно, к чему они должны применяться, если в рабочей директории код находится не в состоянии <СтарыйКоммит>.


3. Указатель HEAD откатится до коммита <СтарыйКоммит>. Команда git log станет проказывать историю до коммита <СтарыйКоммит>, но не дальше. Чтобы увидеть все коммиты, которые даже находятся после коммита, до которого откатился пользователь, нужна команда git log --all.



Вот в таком состоянии будет находиться репозитарий. Что разумного можно сделать в таком состоянии, мне пока не понятно.


* * *


Теперь возникает вопрос: как выйти из этого состояния? Как вернуться хотя бы до прежнего состояния со всеми изменениями, где HEAD соответствовал указателю ветки и находился на самом последнем изменении в ветке?


В этом поможет команда git pull. Однако, она может не сработать в случае, если какой-либо файл в рабочей директории был изменен с момента команды git reset --soft. В этом случае надо действовать по обстоятельствам, git будет подсказывать что надо выполнить.



Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования