Физически невозможно изменить любой коммит. Поэтому то, что вы предлагаете здесь, легко и просто работает: commit C3
остается commit C3
навсегда. Однако вам потребуется выпустить исправленную версию version 1.0.4
, потому что это коммит C3
, который не изменился.
Вы не можете объединить свой коммит с исправлением ошибки в коммит C3
, но нет нужно сделать это. Это ветвь . Вы нарисовали свои коммиты с более новыми в нижней части; Мне нравится рисовать мои с новыми коммитами вправо. Итак, я бы нарисовал вашу ситуацию следующим образом:
tag:v1.0.4
|
v
C1--C2--C3
\
C4 <-- tag:v1.0.5
\
C5 <-- master (HEAD)
^
|
tag:v1.0.6
Когда вы go вернетесь к C3
и добавите там имя ветви (и сделаете его HEAD
), вы получите:
tag:v1.0.4
|
v
C1--C2--C3 <-- patch (HEAD)
\
C4 <-- tag:v1.0.5
\
C5 <-- master
^
|
tag:v1.0.6
Когда вы делаете новый коммит, родитель нового коммита C3
, а имя patch
указывает на новый коммит:
tag:v1.0.4
|
v
C1--C2--C3--C7 <-- patch (HEAD)
\
C4 <-- tag:v1.0.5
\
C5 <-- master
^
|
tag:v1.0.6
Если с коммитом все в порядке C7
(Я пропустил здесь C6 по ошибке, но мог бы и оставить его - каждый коммит в любом случае имеет уникальный, но большой и некрасивый идентификатор ha sh, поэтому они просто заменяют собой идентификаторы реального коммита ha sh), вы можете пометить его как v1.0.4.1
или любой другой тег, который вы бы использовали, чтобы позволить людям обновиться с версии 1.0.4, не переходя до 1.0.5. (Возможно, вам следовало оставить какое-то пространство между 1.0.4 и 1.0.5. :-))
Если для версии 1.0.5 или 1.0.6 не требуется патч, делать больше нечего.