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.
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ś!
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"
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ę, żegit 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
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
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"
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