Что происходит при изменении старого коммита с помощью git? - PullRequest
0 голосов
/ 28 апреля 2010

Я не совсем понимаю, что произойдет, если я проверю старый коммит, внесу некоторые изменения и сделаю коммит, используя git commit --amend.

Будет ли это изменение автоматически распространяться на будущие коммиты? Как это работает?

Ответы [ 3 ]

4 голосов
/ 28 апреля 2010

В git коммиты - это просто объекты.Когда вы git commit --amend, вы просто создаете новый коммит с тем же родителем.Изначально это выглядит так:

                  {HEAD}
                  {master}
---[A]---[B]---[C]

Теперь вы вносите изменения C, создавая новый коммит D:

                  {HEAD}
                  {master}
---[A]---[B]---[D]
            \
             \
              [C]

Старый C все еще существует на данный момент,Однако на него больше не ссылается ни одна ветвь, поэтому в следующий раз, когда произойдет сборка мусора, она будет сметена.

2 голосов
/ 28 апреля 2010

В дополнение к ответу Джона, если вы исправите старый коммит, ничего не произойдет, его дети.

       old commit
            v
o--o--o--o--o--o--o--o--o < original branch tip
          \
           o  < ammended old commit & new branch tip

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

1 голос
/ 28 апреля 2010

Новый коммит создается с тем же родителем, что и старый коммит, и ваша текущая ветка теперь ссылается на новый коммит Старый коммит все еще находится в базе данных объектов и может быть найден с помощью git reflog.

...