Я не использую Mercurial, но так как вы спросили, как Git ведет себя в этом отношении ...
В Git есть два способа отменить: revert
и reset
.
Команда revert
исправляет существующий код так, чтобы он напоминал предыдущее состояние: в истории будет записано изменение с исходного «кода на 7» на «код на 11», а затем исправление на «код7 ".
С другой стороны, reset
- это фактическое" перематывание "истории.Если эта команда используется, изменение в «коде 11» удаляется из дерева истории, и состояние хранилища такое, как если бы изменение никогда не происходило.
Таким образом, тогда как revert
и reset
может привести к тому, что ваш репозиторий, по-видимому, будет восстановлен в том же состоянии, которое существовало до изменения на «код 11», они концептуально очень разные операции.revert
на самом деле создает новую историю, а reset
удаляет существующую историю.
На практике, если операция revert
выполняется в хранилище, и Питер вытягиваетИсходя из этого, в самом деле, его репозиторий также будет записывать изменение обратно на «код 7».С другой стороны, если операция reset
выполняется в хранилище, то из POV репо Питера хранилище, из которого он извлекает, в действительности находится в более старом состоянии, чем его, и ничего не произойдет.Вот почему с Git вы должны использовать reset
, только если никто не извлекал ваши изменения (или вы не отправляли на пульт).При любых других обстоятельствах вы должны использовать revert
.