В соответствии с git's Object Model, если вы только изменяете метаданные фиксации (т. Е. Сообщение фиксации), но не лежащие в нем базовые данные («дерево (деревья)»), то это хеш дерева останется неизменным.
Помимо редактирования сообщения о фиксации, вы также выполняете rebase, который будет изменять хеши дерева каждой фиксации в вашей истории, поскольку любые изменения, сделанные с origin/master
, будут влиять на файлы в вашей переписанной истории: это означает некоторые из файлов (капли), которые ваша фиксация указывает на изменение.
Таким образом, нет пуленепробиваемого способа делать то, что вы хотите.
Таким образом, редактирование фиксации с помощью rebase -i
обычно не изменяет метку времени и автора фиксации, поэтому вы можете использовать это, чтобы однозначно идентифицировать свои фиксации до и после операции переадресации.
Вам необходимо написать сценарий, который записывает все начальные точки ветвления в отношении этого идентификатора «timestamp: author» перед выполнением переустановки, а затем найдите переписанные фиксации с тем же идентификатором «timestamp: author» и переустановите ветвь на нем.
К сожалению, у меня нет времени, чтобы попробовать написать этот скрипт самостоятельно, поэтому я могу только пожелать вам удачи!
Edit: Вы можете получить адрес электронной почты автора и метку времени с помощью:
$ git log --graph --all --pretty=format:"%h %ae:%ci"
* 53ca31a [email protected]:2010-06-16 13:50:12 +0100
* 03dda75 [email protected]:2010-06-16 13:50:11 +0100
| * a8bb03a [email protected]:2010-06-16 13:49:46 +0100
| * b93e59d [email protected]:2010-06-16 13:49:44 +0100
|/
* d4214a2 [email protected]:2010-06-16 13:49:41 +0100
И вы можете получить список филиалов для каждого из них на основе их фиксации хэша:
$ git branch --contains 03dda75
* testbranch
Следите за несколькими ветвями за фиксацию, общий предок d4214a2
принадлежит к обоим ветвям!
Вы можете вместо ветвей использовать 'git notes' для отметки ваших коммитов - они автоматически копируются во время переустановок, я полагаю. (Это новая функция, поэтому вам понадобится последняя версия). Http://www.kernel.org/pub/software/scm/git/docs/git-notes.html – Cascabel
См. Также [как я могу переустановить целая часть истории - несколько ветвей с некоторыми связями между ними, возникающими в результате слияния] (http://stackoverflow.com/a/9706495/94687). Неприятной частью этого решения является необходимость сброса ссылок на ветку темы на новые переустановленные фиксации впоследствии. –