Wykonałem serię zatwierdzeń w Git i zdaję sobie sprawę, że zapomniałem poprawnie ustawić swoją nazwę użytkownika i właściwości adresu e-mail użytkownika (nowy komputer). Nie wysłałem jeszcze tych zatwierdzeń do mojego repozytorium, więc jak mogę je poprawić, zanim to zrobię (tylko 3 najnowsze zatwierdzenia w gałęzi master)?
Patrzyłem na git reset
i git commit -C <id> --reset-author
, ale nie sądzę, że jestem na dobrej drodze.
git
git-commit
git-rewrite-history
pauldoo
źródło
źródło
remote: error: GH007: Your push would publish a private email address.
... `! [zdalne odrzucenie] master -> master (push odrzucony z powodu ograniczeń prywatności e-mail) `.Odpowiedzi:
Ponowne ustawienie / poprawienie wydaje się nieefektywne, gdy masz moc gałęzi filtru na wyciągnięcie ręki:
(dla jasności podzielone na linie, ale nie jest to konieczne)
Po zakończeniu sprawdź wynik, aby upewnić się, że nie zmieniłeś niczego, czego nie chciałeś!
źródło
git filter-branch --help
jest całkiem proste :)--tag-name-filter cat
dofilter-branch
w celu migracji tagów do nowej historii. Używa również--branches --tags
zamiast--all
, co tylko przepisuje historię gałęzi i tagów i pozostawia inne wrefs
spokoju (choć prawdopodobnie nie robi to dużej różnicy, chyba że np. Używaszgit-notes
)-- --all
zHEAD~1..HEAD
git log HEAD~2..HEAD
?Interaktywne podejście rebase jest całkiem przyjemne, gdy jest używane w połączeniu z exec. Możesz uruchomić dowolną komendę powłoki względem określonego zatwierdzenia lub wszystkich zatwierdzeń w rebase.
Najpierw ustaw ustawienia autora git
Następnie, aby zresetować autora dla wszystkich zatwierdzeń po danym SHA
Spowoduje to wyświetlenie edytora, aby potwierdzić zmiany. Wszystko, co musisz tutaj zrobić, to zapisać i wyjść, a przejdzie przez każde zatwierdzenie i uruchomi polecenie określone w opcji -x.
Zgodnie z komentarzem @ Dave poniżej, możesz również zmienić autora, zachowując oryginalne znaczniki czasu za pomocą:
źródło
filter-branch
wtedy, gdy chcesz po prostu naprawić swoje ostatnie zatwierdzenia :). Należy jednak pamiętać, że zmienia to sygnaturę czasową zatwierdzeń.git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name <[email protected]>' -CHEAD"
git log
również pokazał mi stare autorstwo, ale status git poprawnie identyfikował nowe zatwierdzenia i po wymuszeniu były one takie, jak zamierzałem.git rebase -i --root …
zamiast przekazywania SHA.Aby zmienić autora tylko dla ostatniego zatwierdzenia:
Załóżmy, że chcesz zmienić autora tylko dla ostatnich N zatwierdzeń:
UWAGI
--no-edit
odbierają fladze, czygit commit --amend
nie poprosić o dodatkowe potwierdzeniegit rebase -i
, możesz ręcznie wybrać zmiany, w których chcesz zmienić autora,edytowany plik będzie wyglądał następująco:
źródło
--rebase-merges
(krótkiej-r
) opcji, aby zachować topologię gałęzi w stanie nienaruszonym, jeśli zawiera jakieś scalenia.Ta metoda została udokumentowana przez github właśnie w tym celu. Kroki są następujące:
OLD_EMAIL
,CORRECT_EMAIL
iCORRECT_NAME
)git push --force --tags origin 'refs/heads/*'
i gotowe!źródło
Wierzę, że to, czego szukasz, jest
git rebase --interactive
Pozwala na zresetowanie do określonego zatwierdzenia, a następnie przejście do historii zmieniających dodawanie lub grupowanie zatwierdzeń
Tutaj masz wyjaśnienie https://web.archive.org/web/20100213104931/http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase -interaktywny
źródło
Jeśli nie czujesz się bezpiecznie, jeśli chodzi o poniżanie i poprawianie, możesz to zrobić w ten sposób. W tym samym czasie ustawiałbyś również globalną konfigurację, którą prawdopodobnie i tak zamierzałeś zrobić.
git reset HEAD~
(cofnij ostatnie zatwierdzenie)git config --global user.name "Your Name"
git config --global user.email [email protected]
git commit -m "message"
źródło