MyTetra Share
Делитесь знаниями!
Раздвижные стеклянные двери и перегородки перегородки раздвижные стеклянные.
https://trinity-med.ru что такое биоревитализация лица.
Что происходит при откате изменений через git reset --soft
30.01.2018
13:41
Текстовые метки: git, reset, soft
Раздел: Компьютер - Программирование - Системы контроля версий (VCS) - Git

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


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


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



1. Состояние файлов в рабочей директории не откатывается до состояния на указанный коммит. То есть, в рабочей директории никакого отката кода не производится.


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


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


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


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



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


* * *


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


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



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