Вот что произошло.
Вы сделали то, что сделали, и имели это:
M --- v1 --- v2 --- v3 --- v4
На самом деле, это не совсем правильно, у вас было это:
c1 --- c2 --- c3 --- c4 --- c5
^ ^ ^ ^ ^
M v1 v2 v3 v4
У вас есть 5 коммитов и 5 веток, каждая из которых ссылается на свой соответствующий коммит.
Затем вы извлекли v1 и исправили этот коммит, который, в свою очередь, дал вам эту картинку:
c1 --- c2 --- c3 --- c4 --- c5
^ \ ^ ^ ^
M \ v2 v3 v4
c2'
^
v1
Изменение коммита не меняет другие ветви или теги или коммиты, которые все еще ссылаются на старый коммит.Он просто создает новый коммит и указывает на него ветвь.
Что вам нужно сделать, это перебазировать v2 поверх нового v1, затем v3 поверх нового v2 и, наконец, v4 поверхновый v3.
Шаг за шагом это будет результатом перебазирования v2 поверх v3:
c1 --- c2 --- c3 --- c4 --- c5
^ \ ^ ^
M \ v3 v4
c2' --- c3'
^ ^
v1 v2
Как вы можете видеть здесь, c3
сохраняется, потому что c4
все еще ссылается на него, и, таким образом, этот коммит все еще будет частью v3 и v4.
Наконец, после перебазирования v3 и v4 у вас останется:
c1 ( --- c2 --- c3 --- c4 --- c5 )
^ \
M \
c2' --- c3' --- c4' --- c5'
^ ^ ^ ^
v1 v2 v3 v4
Обратите внимание, чтона диске c2-c5 все еще существуют, но поскольку в конце этой строки коммитов нет веток, тегов или других фиксаций, они теперь не видны в журнале и имеют право на сборку мусора, что происходит сейчаса потом.После выполнения GC у вас останется:
c1
^ \
M \
c2' --- c3' --- c4' --- c5'
^ ^ ^ ^
v1 v2 v3 v4
, что, конечно, так же, как это:
c1 --- c2' --- c3' --- c4' --- c5'
^ ^ ^ ^ ^
M v1 v2 v3 v4