Chcę zmienić autora jednego konkretnego zatwierdzenia w historii. To nie jest ostatni zatwierdzenie.
Wiem o tym pytaniu - jak zmienić autora zatwierdzenia w git?
Ale myślę o czymś, w czym identyfikuję zatwierdzenie według skrótu lub skrótu krótkiego.
git
git-commit
MicTech
źródło
źródło
Odpowiedzi:
Interaktywny rebase z punktu wcześniejszego niż zatwierdzenie, które należy zmodyfikować (
git rebase -i <earliercommit>
). Na liście zatwierdzanych rebasingów zmień tekst zpick
naedit
obok hasha tego, który chcesz zmodyfikować. Następnie, gdy git wyświetli monit o zmianę zatwierdzenia, użyj tego:Na przykład, jeśli popełnić historia jest
A-B-C-D-E-F
zF
jakHEAD
, i chcesz zmienić autoraC
iD
, to byś ...git rebase -i B
( tutaj jest przykład tego, co zobaczysz po wykonaniugit rebase -i B
polecenia )A
, użyjgit rebase -i --root
C
iD
odpick
doedit
:wq
).C
git commit --amend --author="Author Name <[email protected]>"
git rebase --continue
D
git commit --amend --author="Author Name <[email protected]>"
znowugit rebase --continue
git push -f
aby zaktualizować swoje pochodzenie za pomocą zaktualizowanych zatwierdzeń.źródło
git rebase -i <commit>
vim
. Aby zapisać i wyjść, wpisz Esc: wq Enter. Z drugiej strony, jeśli jest to Nano i widzisz na dole takie rzeczy jak „WriteOut: ^ O”, powinieneś zamiast tego użyć Ctrl + O, Enter, Ctrl + X.--no-edit
opcji.git commit --amend --reset-author --no-edit
nie otworzy edytora. Dostępne od wersji 1.7.9.git rebase -i --root
Odpowiedź Zaakceptowany na to pytanie jest cudownie mądre wykorzystanie interaktywnej rebase, ale niestety wykazuje konfliktów czy popełnić staramy się zmienić autor kiedyś na oddział, który został następnie połączyła się. Bardziej ogólnie, to nie działa podczas obsługi niechlujnych historii.
Ponieważ obawiam się uruchamiania skryptów, które zależą od ustawiania i wyłączania zmiennych środowiskowych w celu przepisania historii git, piszę nową odpowiedź na podstawie tego postu, która jest podobna do tej odpowiedzi ale jest bardziej kompletna.
Poniższe jest testowane i działa, w przeciwieństwie do połączonej odpowiedzi. Załóżmy dla jasności prezentacji, że
03f482d6
jest to zatwierdzenie, którego autora próbujemy zastąpić, i42627abe
jest to zatwierdzenie z nowym autorem.Sprawdź zatwierdzenie, które próbujemy zmodyfikować.
Zmień autora.
Teraz mamy nowe zatwierdzenie z haszem, o którym się mówi
42627abe
.Kasa oryginalnego oddziału.
Zamień stare zatwierdzenie na nowe lokalnie.
Przepisz wszystkie przyszłe zatwierdzenia na podstawie zamiany.
Usuń zamiennik dla czystości.
Wciśnij nową historię (użyj --force, jeśli poniżej nie powiedzie się i tylko po sprawdzeniu poczytalności za pomocą
git log
i / lubgit diff
).Zamiast 4-6 możesz po prostu zmienić bazę na nowe zatwierdzenie:
źródło
git rebase -i
. Nigdy wcześniej o tym nie słyszałemgit replace
. +1--force-with-lease
zamiast-f
. To jest bezpieczniejsze.git filter-branch -- --all
zmienia zatwierdzenia we wszystkich gałęziach, w których znajdowało się oryginalne zatwierdzenie. Jeśli nie masz wystarczających poświadczeń (lub po prostu nie chcesz zmieniać historii oddziałów innych osób), dobrze jest zachować ostrożność przy tej odpowiedzi.Dokumentacja Github zawiera skrypt, który zastępuje informacje o committerze dla wszystkich zatwierdzeń w gałęzi .
Uruchom następujący skrypt z terminala po zmianie wartości zmiennych
Prześlij poprawioną historię do GitHub:
LUB jeśli chcesz wypchnąć wybrane referencje gałęzi, użyj
źródło
clone
/push
, powstanie zapasowa przestrzeń nazwrefs/original/
. Nie mogłem znaleźć sposobu na inteligentne usunięcie tej przestrzeni nazw, więc skończyłem z usuwaniem katalogu.git/refs/original
, który zadziałał.git push -f
wymusić zmiany wypychane w repozytorium.Zresetuj swój e-mail do konfiguracji globalnie:
git config --global user.email [email protected]
Teraz zresetuj autora zatwierdzenia bez wymaganej edycji:
git commit --amend --reset-author --no-edit
źródło
It's not last commit.
Jak byamend
to zrobili ?git reset HEAD~
, sprawdziłem sugerowane linie, a następnie ponownie wykonałem następne zatwierdzenie ręcznie. Działało dobrze!git config --local user.name FirstName LastName
igit config --local user.email [email protected]
. Następnie zastosuj do ostatnich sześciu zatwierdzeń za pomocągit rebase --onto HEAD~6 --exec "git commit --amend --reset-author --no-edit" HEAD~6
. Wreszcie wypchnij go do zdalnego repozytorium Git za pomocągit push --force-with-lease
.Możesz zmienić autora ostatniego zatwierdzenia za pomocą poniższego polecenia.
git commit --amend --author="Author Name <[email protected]>"
Jednak jeśli chcesz zmienić więcej niż jedno nazwisko autora, jest to nieco trudne. Musisz uruchomić interaktywny rebase, następnie zaznaczyć commits jako edycję, a następnie zmieniać je jeden po drugim i zakończyć.
Zacznij bazować na
git rebase -i
. Pokaże ci coś takiego.Zmień
pick
słowo kluczowe naedit
dla commits, które chcesz zmienić nazwisko autora.Następnie zamknij edytor. Dla początkujących naciśnij,
Escape
a następnie wpisz:wq
i naciśnijEnter
.Wtedy zobaczysz swój terminal, jakby nic się nie wydarzyło. Właściwie jesteś w trakcie interaktywnej bazy. Teraz nadszedł czas na zmianę nazwy autora zatwierdzenia za pomocą powyższego polecenia. Ponownie otworzy edytor. Wyjdź i kontynuuj bazowanie za pomocą
git rebase --continue
. Powtórz to samo dla liczby zatwierdzeń, którą chcesz edytować. Możesz upewnić się, że interaktywny rebase zakończy się, gdy otrzymaszNo rebase in progress?
wiadomość.źródło
pick
działanie i dodać po każdej liniiexec git commit --no-edit --amend --author="MyNewAuthor <[email protected]>"
Odpowiedzi w pytaniu, do którego dałeś link, są dobrymi odpowiedziami i obejmują twoją sytuację (drugie pytanie jest bardziej ogólne, ponieważ wymaga przepisania wielu zatwierdzeń).
Jako pretekst do wypróbowania
git filter-branch
, napisałem skrypt, aby przepisać Nazwę autora i / lub E-mail autora dla danego zatwierdzenia:źródło
Zatwierdź przed:
Aby naprawić autora wszystkich zatwierdzeń, możesz zastosować polecenie z odpowiedzi @ Amber:
Lub, aby ponownie użyć swojego imienia i adresu e-mail, możesz po prostu napisać:
Zatwierdź po poleceniu:
Na przykład, aby zmienić wszystko, zaczynając od
4025621
:Musisz biec:
Uwaga: Aby dołączyć autora zawierającego spacje, takie jak imię i adres e-mail, autor musi być otoczony cudzysłowami. Na przykład:
lub dodaj ten alias do
~/.gitconfig
:A następnie uruchom:
źródło
git shortlog -e -s
.Jest jeszcze jeden krok do odpowiedzi AmberJeśli używasz scentralizowanego repozytorium, :
git push -f
wymusić aktualizację centralnego repozytorium.Uważaj, aby nie było zbyt wielu ludzi pracujących w tym samym oddziale, ponieważ może to zepsuć spójność.
źródło
Podczas robienia
git rebase -i
w dokumencie jest interesujący fragment:A-B-C-D-E-F
,B
iD
(= 2 zatwierdzenia),wtedy możesz zrobić:
git config user.name "Correct new name"
git config user.email "[email protected]"
git commit --allow-empty -m "empty"
git rebase -i B^
B^
wybiera element nadrzędnyB
.pick
sięsquash
dla nich.Przykład tego, co
git rebase -i B^
da ci:zmień to na:
Poprosi Cię o edycję wiadomości:
i możesz po prostu usunąć kilka pierwszych wierszy.
źródło
W odpowiedzi na odpowiedź Eugena Konkova , aby rozpocząć od głównego zatwierdzenia, użyj
--root
flagi.--no-edit
Flaga jest też pomocnyźródło
Znajdź sposób, który może szybko zmienić użytkownika i nie wywołuje żadnych skutków ubocznych w stosunku do innych.
Prosty i przejrzysty sposób:
szczegółowe operacje
refs/heads/master.
źródło
Jeśli zatwierdzenie, które chcesz zmienić, nie jest ostatnim zatwierdzeniem, wykonaj następujące czynności. Jeśli twoje zatwierdzenie znajduje się w innej gałęzi, najpierw przełącz się na tę gałąź.
git kasa nazwa_gałęzi
Znajdź zatwierdzenie przed zatwierdzeniem, które chcesz zmienić, i znajdź jego skrót. Następnie wydaj polecenie rebase.
git rebase -i -p hash zatwierdzenia
Następnie otworzy się edytor i wprowadzi „edytuj” dla zatwierdzeń, które chcesz zmienić. Pozostaw innym opcję domyślnej opcji „wybierz”. Po zmianie wpisz „esc” i wq! do wyjścia.
Następnie wydaj polecenie git commit z opcją zmiany.
git commit --amend --author = "Adres e-mail użytkownika" - nie można edytować
Następnie wydaj następujące polecenie.
git rebase - kontynuuj
Po zaktualizowaniu autora zatwierdzenia w lokalnym repozytorium, wypchnij zmiany do zdalnego repozytorium.
źródło
Istnieje również leniwe podejście do tego problemu, szczególnie jeśli masz więcej niż jeden zatwierdzenie, które chcesz zmienić. W moim przypadku miałem nowy oddział z kilkoma zatwierdzeniami ze złym autorem, co pomogło mi:
Przejdź do swojego oryginalnego oddziału:
Utwórz z niego nowy oddział:
Scal go bez informacji o zatwierdzeniu jako jedno zatwierdzenie:
Możesz także wprowadzić zmiany:
Zmień nazwisko autora i zatwierdź zmiany:
I to wszystko, możesz wprowadzić zmiany.
Następnie możesz usunąć oddział z niewłaściwym autorem.
źródło
Kroki zmiany nazwy autora po wciśnięciu zatwierdzenia
git rebase i HEAD ~ 10 (10 to całkowite zatwierdzenie do wyświetlenia przy rebase)
If you Get anything like below
fatal: It seems that there is already a rebase-merge directory, and I wonder if you are in the middle of another rebase. If that is the case, please try
git rebase (--continue | --abort | --skip)
If that is not the case, please rm -fr ".git/rebase-merge" and run me again. I am stopping in case you still have something valuable there.
Następnie wpisz „git rebase --continue” lub „git rebase --abort” zgodnie z potrzebami
pick 897fe9e simplify code a little
pick abb60f9 add new feature
pick dc18f70 bugfix
Teraz musisz dodać polecenie poniżej poniżej zatwierdzenia, które chcesz edytować, jak poniżej
pick 897fe9e simplify code a little exec git commit --amend --author 'Author Name <[email protected]>' pick abb60f9 add new feature exec git commit --amend --author 'Author Name <[email protected]>' pick dc18f70 bugfix exec git commit --amend --author 'Author Name <[email protected]>'
To wszystko, teraz wystarczy nacisnąć ESC: wq i wszystko gotowe
Następnie git push origin HEAD: BRANCH NAME -f [zadbaj o -f Force push]
jak
git push -f
lubgit push origin HEAD: dev -f
źródło
git push
polecenia?Globalna zmiana nazwy osoby odpowiedzialnej i adresu e-mail:
Zmiana nazwy osoby odpowiedzialnej i adresu e-mail dla repozytorium:
Zmiana informacji o autorze tylko do następnego zatwierdzenia:
Wskazówka : w innej sytuacji i przeczytaj więcej informacji przeczytaj odnośnik do wpisu .
źródło
Jeśli to, co musisz zmienić, to AUTOR OSTATNEGO zatwierdzenia, a żadne inne nie korzysta z Twojego repozytorium, możesz cofnąć ostatnie zatwierdzenie za pomocą:
zmień nazwę autora swojego zatwierdzenia za pomocą:
Wyjdź z edytora, który się otworzy i ponownie wciśnij kod:
źródło
W przypadku komunikatu zatwierdzenia
rebase
korespondencji okazało się, że nie mogę go zmienić za pomocą , przynajmniej na gitlab. Pokazuje scalenie jako zatwierdzenie, ale nie mogę bazować na tym #sha. Znalazłem ten post jest pomocny.Te trzy wiersze kodu wykonały zadanie zmiany komunikatu zatwierdzenia scalania (jak autor).
źródło
możesz użyć tych poleceń z oficjalnej strony github
https://help.github.com/en/github/using-git/changing-author-info
oto polecenia
tutaj możesz zmienić stary adres e-mail na nową nazwę użytkownika i adres e-mail.
źródło