Согласно объектной модели git , если вы изменяете только метаданные коммита (т.е. сообщение коммита), но не базовые данные ("дерево (и)"), содержащиеся в нем, тогда это хеш дерева останется без изменений.
Помимо редактирования сообщения о коммите, вы также выполняете ребазинг, который изменит хеши дерева каждого коммита в вашей истории, потому что любые изменения, извлеченные из origin/master
, будут влиять на файлы в вашей переписанной истории: означает некоторые из файлов (больших двоичных объектов), которые были изменены вашими точками фиксации.
Так что нет никакого пуленепробиваемого способа делать то, что вы хотите.
Тем не менее, редактирование коммита с помощью rebase -i
обычно не изменяет метку времени и автора, поэтому вы можете использовать это для уникальной идентификации ваших коммитов до и после операции rebase.
Вы должны написать сценарий, который записывает все начальные точки ветки по этим идентификаторам "timestamp: author", прежде чем выполнять ребазинг, а затем найти переписанные коммиты с тем же идентификатором "timestamp: author" и перебазировать ветку на нем.
К сожалению, сейчас у меня нет времени самим писать этот сценарий, поэтому я могу только пожелать вам удачи!
Редактировать : Вы можете получить адрес электронной почты автора и метку времени, используя:
$ git log --graph --all --pretty=format:"%h %ae:%ci"
* 53ca31a robert.meerman@gmail.com:2010-06-16 13:50:12 +0100
* 03dda75 robert.meerman@gmail.com:2010-06-16 13:50:11 +0100
| * a8bb03a robert.meerman@gmail.com:2010-06-16 13:49:46 +0100
| * b93e59d robert.meerman@gmail.com:2010-06-16 13:49:44 +0100
|/
* d4214a2 robert.meerman@gmail.com:2010-06-16 13:49:41 +0100
И вы можете получить список ветвей для каждого из них на основе их хеша коммита:
$ git branch --contains 03dda75
* testbranch
Следите за несколькими ветвями за коммит, общий предок d4214a2
принадлежит обеим веткам!