Как я могу перебазировать коммит другого автора без добавления себя в качестве коммиттера? - PullRequest
23 голосов
/ 02 апреля 2011

Обычно, когда вы изменяете коммит другого автора с помощью git, git добавляет заголовок Commit: с вашим именем и адресом электронной почты. У меня есть ситуация, когда я не хочу, чтобы это произошло. Я хочу, чтобы перебазированный коммит заканчивался тем же SHA1, который был бы, если бы первоначальный автор сделал эквивалентную перебазировку сам. Возможно ли это?

Ответы [ 2 ]

24 голосов
/ 02 апреля 2011

Все коммиты git имеют внутреннее поле коммиттера; Вы можете увидеть это, набрав git cat-file commit HEAD сразу после совершения чего-либо. Как таковой, вы не можете стереть это; Вы можете сделать его равным только полю автора.

Тем не менее, вы можете видеть, что git фарфор показывает поле коммита, потому что datetamp изменилось. Очевидно, что невозможно предсказать, что кто-то другой получит для метки даты фиксации, если он будет перебазировать, но вы можете изменить ее, чтобы она была равна, по крайней мере, исходной метке времени фиксации.

git filter-branch --commit-filter 'export GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"; export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"; git commit-tree "$@"' -- basecommit..HEAD

Это изменит коммиты после basecommit в истории HEAD (включая HEAD, не включая basecommit), делая их поле коммиттера идентичным полю автора во всех отношениях. Если первоначальный автор соглашается сделать то же самое, тогда вы можете получить согласованный SHA1.

5 голосов
/ 02 апреля 2011

Попробуйте установить переменную окружения GIT_COMMITTER_NAME и GIT_COMMITTER_EMAIL при перебазировании (возможно, также GIT_COMMITTER_DATE) (Это повлияет на все коммиты, созданные сейчас.)

...