Что происходит при внесении изменений в старый коммит с Git?

StackOverflow https://stackoverflow.com/questions/2730720

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top