Что происходит при внесении изменений в старый коммит с Git?
-
02-10-2019 - |
Вопрос
Я не очень понимаю, что произойдет, если я проверю старый коммит, делаю некоторые модификации, и обязываться git commit --amend
.
Это изменение автоматически распространяется на будущие коммиты? Как это работает?
Решение
В Git Chayits - это просто объекты. Когда ты git commit --amend
, Вы просто создаете новый коммит с тем же родителем. Первоначально это выглядит так:
{HEAD}
{master}
---[A]---[B]---[C]
Теперь вы поправляете C
, создать новый коммит D
:
{HEAD}
{master}
---[A]---[B]---[D]
\
\
[C]
Старый C
все еще там на данный момент. Тем не менее, он больше не ссылается ни одной ветви, поэтому в следующий раз возникает сбор мусора, он будет сметен.
Другие советы
Чтобы дополнить ответ Джона, если вы помните старый коммит, ничего не происходит его дети.
old commit
v
o--o--o--o--o--o--o--o--o < original branch tip
\
o < ammended old commit & new branch tip
Может быть, вы хотите сделать, может быть достигнуто с помощью Интерактивная ребаза, что сквош совершает.
Новый коммит создан с тем же родителем, что и старый коммит, и ваш нынешний филиал теперь относится к новому коммитуру. Старый коммит все еще находится в базе данных объектов и можно найти с git reflog
.