Jak zmienić kilka commitów w Git, aby zmienić autora

Wykonałem serię commitów w Git i zdałem sobie sprawę, że zapomniałem poprawnie ustawić swoją nazwę użytkownika i właściwości e-mail użytkownika (nowa maszyna). Nie wepchnąłem jeszcze tych zmian do repozytorium, więc jak mogę je poprawić zanim to zrobię(tylko 3 ostatnie zmiany w gałęzi master)?

Patrzyłem na git reset i git commit -C <id> --reset-author, ale chyba nie jestem na dobrej drodze.

Author: Chris Maes, 2011-02-13

5 answers

Rebase / amend wydaje się nieefektywny, gdy masz moc filter-branch na wyciągnięcie ręki:

git filter-branch --env-filter 'if [ "$GIT_AUTHOR_EMAIL" = "incorrect@email" ]; then
     GIT_AUTHOR_EMAIL=correct@email;
     GIT_AUTHOR_NAME="Correct Name";
     GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL;
     GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; fi' -- --all

(podziel na linie dla jasności, ale nie jest to konieczne)

Pamiętaj, aby sprawdzić wynik, kiedy skończysz, aby upewnić się, że nie zmieniłeś niczego, czego nie chciałeś!

 143
Author: Cascabel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-13 03:33:19

Interaktywne podejście rebase jest całkiem przyjemne, gdy jest używane w połączeniu z exec. Możesz uruchomić dowolne polecenie powłoki z określonym zatwierdzeniem lub wszystkimi zatwierdzeniami w rebase.

Najpierw ustaw ustawienia git author

git config --global user.name "John Doe"
git config --global user.email [email protected]

Następnie resetować autora dla wszystkich commitów po podanym SHA

git rebase -i YOUR_SHA -x "git commit --amend --reset-author -CHEAD"

Wyświetli się Edytor, aby potwierdzić zmiany. Wszystko, co musisz zrobić, to zapisać i zamknąć, a to przejdzie przez każdy commit i uruchomi polecenie określone w-x flaga.

Za komentarz @ Dave ' a poniżej możesz również zmienić autora, zachowując oryginalne znaczniki czasu za pomocą:

git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name <[email protected]>' -CHEAD"
 88
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-31 12:35:54

Aby zmienić autora tylko dla ostatniego commita:

git commit --amend --author 'Author Name <[email protected]>' --no-edit

Załóżmy, że chcesz zmienić autora tylko dla ostatnich n commitów:

git rebase -i HEAD~4 -x "git commit --amend --author 'Author Name <[email protected]>' --no-edit"

Uwagi

  • flaga --no-edit upewnia się, że git commit --amend nie poprosi o dodatkowe potwierdzenie
  • kiedy używasz git rebase -i, możesz ręcznie wybrać commity, w których chcesz zmienić autora,

Edytowany plik będzie wyglądał tak:

pick 897fe9e simplify code a little
pick abb60f9 add new feature
exec git commit --amend --author 'Author Name <[email protected]>' --no-edit
pick dc18f70 bugfix
 49
Author: Chris Maes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-28 07:19:43

I believe what you are looking for is git rebase --interactive

Pozwala na zresetowanie do określonego commita, a następnie rzucenie historii zmieniającej dodawanie lub grupowanie commitów

Tutaj masz Wyjaśnienie http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive

 3
Author: Fernando Diaz Garrido,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-12 23:16:18

Jeśli czujesz się niepewnie z powodu poniżania i zmiany, możesz to zrobić w ten sposób. W tym samym czasie możesz również ustawić globalną konfigurację, którą prawdopodobnie i tak zamierzałeś zrobić.

git reset HEAD~ (undo last commit)

git config --global user.name "Your Name"

git config --global user.email [email protected]

git commit -m "message"

 0
Author: tymac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-13 03:28:13