Если вы хотите изменить только информацию о коммиттере, вы можете использовать git rebase
, который принимает ваши коммиты и воспроизводит их поверх другого коммита. Здесь важна опция --no-ff
, так как она гарантирует, что каждый коммит будет воссоздан. В противном случае git будет перемотан вперед в случае, если перебазировка будет запрещена.
GIT_COMMITTER_NAME=Adam;
GIT_COMMITTER_EMAIL=adam@example.com;
export GIT_COMMITTER_NAME;
export GIT_COMMITTER_EMAIL;
git rebase --no-ff <commit before changes on Machine1>
Это быстро усложняется, когда ваша история немного сложнее (сливается), в этом случае может быть лучше использовать filter-branch.
Если вы также хотите изменить информацию об авторе, используйте git filter-branch
и перепишите все свои коммиты с помощью --env-filter
. обязательно иметь резервную копию на случай, если моя команда ошибочна;) - хотя я на это не надеюсь
git filter-branch --env-filter '
GIT_AUTHOR_NAME=Adam;
GIT_AUTHOR_EMAIL=adam@example.com;
export GIT_AUTHOR_NAME;
export GIT_AUTHOR_EMAIL;
git commit-tree "$@";
' <commit before changes on Machine1>..HEAD
вы также можете использовать --all
вместо refspec, чтобы переписать все коммиты в вашем хранилище
nb: это плохо, если вы уже поделились своим хранилищем, и вам придется повторно клонировать его на каждую машину, с которой вы хотите работать.