Jak zmienić autora zatwierdzenia dla jednego konkretnego zatwierdzenia?


Odpowiedzi:


3563

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 z pickna editobok hasha tego, który chcesz zmodyfikować. Następnie, gdy git wyświetli monit o zmianę zatwierdzenia, użyj tego:

git commit --amend --author="Author Name <email@address.com>" --no-edit

Na przykład, jeśli popełnić historia jest A-B-C-D-E-Fz Fjak HEAD, i chcesz zmienić autora Ci D, to byś ...

  1. Określ git rebase -i B( tutaj jest przykład tego, co zobaczysz po wykonaniu git rebase -i Bpolecenia )
    • jeśli chcesz edytować A, użyjgit rebase -i --root
  2. Zmień linie dla obu Ci Dodpick doedit
  3. Wyjdź z edytora (dla vima byłoby to naciśnięcie Esc, a następnie pisanie :wq).
  4. Gdy zacznie się rebase, najpierw zatrzyma się na C
  5. Ty byś git commit --amend --author="Author Name <email@address.com>"
  6. Następnie git rebase --continue
  7. Zatrzymałby się ponownie o godz D
  8. Potem byś git commit --amend --author="Author Name <email@address.com>"znowu
  9. git rebase --continue
  10. Rebase zakończy się.
  11. Użyj, git push -faby zaktualizować swoje pochodzenie za pomocą zaktualizowanych zatwierdzeń.

90
Dobra odpowiedź, ale dla początkujących: najpierw znajdź zatwierdzenie poprzedzające ten, który chcesz zmienić, a następnie uruchomgit rebase -i <commit>
Mathew Byrne

47
Jeśli nie wiesz, w którym edytorze jesteś, odpowiedź jest prawdopodobna 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.
Amber

30
co jeśli chcesz zmodyfikować pierwsze zatwierdzenie? Jaki jest zatem poprzedni hash zatwierdzenia?
Brenden

219
Użyj --no-editopcji. git commit --amend --reset-author --no-editnie otworzy edytora. Dostępne od wersji 1.7.9.
5lava,

51
@Brenden, aby zmodyfikować pierwsze zatwierdzenie w projekcie, użyjgit rebase -i --root
Noah Passalacqua

488

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 03f482d6jest to zatwierdzenie, którego autora próbujemy zastąpić, i 42627abejest to zatwierdzenie z nowym autorem.

  1. Sprawdź zatwierdzenie, które próbujemy zmodyfikować.

    git checkout 03f482d6
    
  2. Zmień autora.

    git commit --amend --author "New Author Name <New Author Email>"
    

    Teraz mamy nowe zatwierdzenie z haszem, o którym się mówi 42627abe.

  3. Kasa oryginalnego oddziału.

  4. Zamień stare zatwierdzenie na nowe lokalnie.

    git replace 03f482d6 42627abe
    
  5. Przepisz wszystkie przyszłe zatwierdzenia na podstawie zamiany.

    git filter-branch -- --all
    
  6. Usuń zamiennik dla czystości.

    git replace -d 03f482d6
    
  7. Wciśnij nową historię (użyj --force, jeśli poniżej nie powiedzie się i tylko po sprawdzeniu poczytalności za pomocą git logi / lub git diff).

    git push --force-with-lease
    

Zamiast 4-6 możesz po prostu zmienić bazę na nowe zatwierdzenie:

git rebase -i 42627abe

9
Proszę umieścić notatkę, aby ponownie sprawdzić swój oryginalny oddział po kroku 2.
Benjamin Riggs

42
To wygląda na wyraźną alternatywę dla przerażających git rebase -i. Nigdy wcześniej o tym nie słyszałem git replace. +1
FractalSpace

3
Aby wyczyścić kopię
referencji

5
Polecam używać --force-with-leasezamiast -f. To jest bezpieczniejsze.
Jay Bazuzi

11
OSTRZEŻENIE: pamiętaj, że git filter-branch -- --allzmienia 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.
ribamar

225

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

    #!/bin/sh
    
    git filter-branch --env-filter '
    
    OLD_EMAIL="your-old-email@example.com"
    CORRECT_NAME="Your Correct Name"
    CORRECT_EMAIL="your-correct-email@example.com"
    
    if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_COMMITTER_NAME="$CORRECT_NAME"
        export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
    fi
    if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_AUTHOR_NAME="$CORRECT_NAME"
        export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
    fi
    ' --tag-name-filter cat -- --branches --tags
    
  • Prześlij poprawioną historię do GitHub:

    git push --force --tags origin 'refs/heads/*'
    

    LUB jeśli chcesz wypchnąć wybrane referencje gałęzi, użyj

    git push --force --tags origin 'refs/heads/develop'
    

12
Zmienia to wszystkie zobowiązania, nie tylko jeden. Zabawne, że zrobiłem to mniej niż 30 minut temu.
Artjom B.,

Kiedy znalazłem tę odpowiedź po przeczytaniu poprzednich, pomyślałem, że warto spróbować i voila to zadziałało. Jednak w moim przypadku zmieniła nazwę osoby odpowiedzialnej tylko przy początkowym zatwierdzeniu. Nawiasem mówiąc, zanim spróbowałem pomysłów z pierwszej odpowiedzi. Może w jakiś sposób wpłynęło to na system.
Ruslan Gerasimov,

2
Pamiętaj, że jeśli unikniesz używania clone/ push, powstanie zapasowa przestrzeń nazw refs/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ł.
VasiliNovikov

Dlaczego powoduje to zmiany w repozytorium, jeśli np. OLD_EMAIL nic nie pasuje? Z jakiegoś powodu kilka (ale nie wszystkie!) Zmian zatwierdza zmianę.
mjs,

1
Mój przypadek użycia tej odpowiedzi to: Mam dwa konta github, jedno, którego nieumyślnie wykorzystałem do zatwierdzenia. Ten skrypt pomógł naprawić wszystkie moje zatwierdzenia, zmieniając nazwę niepoprawnego adresu e-mail / nazw osoby zatwierdzającej. Oczywiście, jeśli popełniłem błąd z niewłaściwym użytkownikiem, powiedzmy, od 50. zatwierdzenia do 500. zatwierdzenia, będzie 450 rozbieżnych zatwierdzeń. W każdym razie, po uruchomieniu skryptu, jak zauważył @andrej, musisz git push -fwymusić zmiany wypychane w repozytorium.
LWY

165
  • Zresetuj swój e-mail do konfiguracji globalnie:

    git config --global user.email example@email.com

  • Teraz zresetuj autora zatwierdzenia bez wymaganej edycji:

    git commit --amend --reset-author --no-edit


2
Nie, nie jest. Spójrz na PO: It's not last commit.Jak by amendto zrobili ?
underscore_d

2
To wspaniale, szkoda, że ​​to tylko ostatnie zatwierdzenie. Potrzebowałem go na dwóch ostatnich, na szczęście, więc właśnie zrobiłem a git reset HEAD~, sprawdziłem sugerowane linie, a następnie ponownie wykonałem następne zatwierdzenie ręcznie. Działało dobrze!
Matt Fletcher,

2
Dzięki! --Reset-autor wykonał dla mnie lewę, ponieważ bez niej autor się zmienia, ale „commiter” pozostaje ze starymi danymi autora.
Lucas P.,

9
Aby naprawić moje ostatnie sześć zmian: Najpierw ustaw poprawnego autora dla bieżącego repozytorium Git, używając git config --local user.name FirstName LastName i git config --local user.email first.last@example.com. 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.
olibre

@olibre to działa jak urok, dzięki.
Bruno Gasparotto,

88

Możesz zmienić autora ostatniego zatwierdzenia za pomocą poniższego polecenia.

git commit --amend --author="Author Name <email@address.com>"

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.

https://monosnap.com/file/G7sdn66k7JWpT91uiOUAQWMhPrMQVT.png

Zmień picksłowo kluczowe na editdla commits, które chcesz zmienić nazwisko autora.

https://monosnap.com/file/dsq0AfopQMVskBNknz6GZZwlWGVwWU.png

Następnie zamknij edytor. Dla początkujących naciśnij, Escapea następnie wpisz :wqi naciśnij Enter.

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 otrzymasz No rebase in progress?wiadomość.


Czy możesz zaktualizować swoje zdjęcia?
Shimmy Weitzhandler,

1
Jeśli masz wiele zatwierdzeń do zmiany, zamiast edytować je osobno, możesz także zezwolić na pickdziałanie i dodać po każdej liniiexec git commit --no-edit --amend --author="MyNewAuthor <my@new-auth.or>"
Pierre-Olivier Vares

60

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:

#!/bin/sh

#
# Change the author name and/or email of a single commit.
#
# change-author [-f] commit-to-change [branch-to-rewrite [new-name [new-email]]]
#
#     If -f is supplied it is passed to "git filter-branch".
#
#     If <branch-to-rewrite> is not provided or is empty HEAD will be used.
#     Use "--all" or a space separated list (e.g. "master next") to rewrite
#     multiple branches.
#
#     If <new-name> (or <new-email>) is not provided or is empty, the normal
#     user.name (user.email) Git configuration value will be used.
#

force=''
if test "x$1" = "x-f"; then
    force='-f'
    shift
fi

die() {
    printf '%s\n' "$@"
    exit 128
}
targ="$(git rev-parse --verify "$1" 2>/dev/null)" || die "$1 is not a commit"
br="${2:-HEAD}"

TARG_COMMIT="$targ"
TARG_NAME="${3-}"
TARG_EMAIL="${4-}"
export TARG_COMMIT TARG_NAME TARG_EMAIL

filt='

    if test "$GIT_COMMIT" = "$TARG_COMMIT"; then
        if test -n "$TARG_EMAIL"; then
            GIT_AUTHOR_EMAIL="$TARG_EMAIL"
            export GIT_AUTHOR_EMAIL
        else
            unset GIT_AUTHOR_EMAIL
        fi
        if test -n "$TARG_NAME"; then
            GIT_AUTHOR_NAME="$TARG_NAME"
            export GIT_AUTHOR_NAME
        else
            unset GIT_AUTHOR_NAME
        fi
    fi

'

git filter-branch $force --env-filter "$filt" -- $br

+1 dzięki. assemblela.com git repo nie wydaje się zmieniać wszystkich odniesień do autora w widoku sieci repo, ale wyniki „git pull / clone” wydają się działać poprawnie.
Johnny Utahh

Świetne rozwiązanie, ponieważ zmienia tylko to, co jest zamierzone, a nie inne pola, takie jak data zatwierdzenia.
Guillaume Lemaître

12
Dokumentacja Github zawiera podobny skrypt
olivieradam666

2
@ olivieradam666, który działa jak urok i jest łatwiejszy do odczytania
fregante

@ olivieradam666 Dziękujemy. Powinieneś naprawdę dodać to jako odpowiedź, aby zyskało więcej uwagi.
seane

44

Zatwierdź przed:

wprowadź opis zdjęcia tutaj

Aby naprawić autora wszystkich zatwierdzeń, możesz zastosować polecenie z odpowiedzi @ Amber:

git commit --amend --author="Author Name <email@address.com>"

Lub, aby ponownie użyć swojego imienia i adresu e-mail, możesz po prostu napisać:

git commit --amend --author=Eugen

Zatwierdź po poleceniu:

wprowadź opis zdjęcia tutaj

Na przykład, aby zmienić wszystko, zaczynając od 4025621:

wprowadź opis zdjęcia tutaj

Musisz biec:

git rebase --onto 4025621 --exec "git commit --amend --author=Eugen" 4025621

Uwaga: Aby dołączyć autora zawierającego spacje, takie jak imię i adres e-mail, autor musi być otoczony cudzysłowami. Na przykład:

git rebase --onto 4025621 --exec "git commit --amend --author=\"Foo Bar <foo@bar.com>\"" 4025621

lub dodaj ten alias do ~/.gitconfig:

[alias]
    reauthor = !bash -c 'git rebase --onto $1 --exec \"git commit --amend --author=$2\" $1' --

A następnie uruchom:

git reauthor 4025621 Eugen

1
Aby sprawdzić, czy polecenie działało zgodnie z oczekiwaniami, przejrzałem dane wyjściowe git shortlog -e -s.
Taylor Edmiston

5
To jest odpowiedź, która najlepiej służy moim celom, dziękuję. A ponieważ chciałem tylko dostosować mój adres e-mail, po aktualizacji mojego .git / config mogłem uruchomić z --exec = "git commit --amend --reset-author".
Dato,

1
Eee, nie jestem pewien, dlaczego zapomniałem! Gotowe teraz
Dato,

Świetna odpowiedź i bardzo łatwa do naprawienia. Uwielbiam pseudonim!
J_A_X

to mi nie pomogło. teraz mam błąd Kontynuuj Rebase Błąd
Alexey Sh.

17

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ść.


16

Podczas robienia git rebase -iw dokumencie jest interesujący fragment:

Jeśli chcesz złożyć dwa lub więcej zatwierdzeń w jeden, zamień polecenie "pick"dla drugiego i kolejnych zatwierdzeń na "squash"lub "fixup". Jeśli zatwierdzenia miały różnych autorów, złożone zatwierdzenie zostanie przypisane autorowi pierwszego zatwierdzenia. Sugerowany komunikat zatwierdzenia dla złożonego zatwierdzenia jest konkatenacją komunikatów zatwierdzenia pierwszego zatwierdzenia i tych z "squash"poleceniem, ale pomija komunikaty zatwierdzenia zatwierdzeń z "fixup"poleceniem.

  • Jeśli masz historię A-B-C-D-E-F ,
  • i chcesz zmienić zatwierdzenia Bi D(= 2 zatwierdzenia),

wtedy możesz zrobić:

  • git config user.name "Correct new name"
  • git config user.email "correct@new.email"
  • utwórz puste zatwierdzenia (po jednym dla każdego zatwierdzenia):
    • potrzebujesz wiadomości dla celów rebase
    • git commit --allow-empty -m "empty"
  • rozpocznij operację rebase
    • git rebase -i B^
    • B^wybiera element nadrzędny B.
  • będziesz chciał wstawić jeden pusty zatwierdzenie przed każdym zatwierdzeniem do modyfikacji
  • będziesz chciał zmienić picksię squashdla nich.

Przykład tego, co git rebase -i B^da ci:

pick sha-commit-B some message
pick sha-commit-C some message
pick sha-commit-D some message
pick sha-commit-E some message
pick sha-commit-F some message
# pick sha-commit-empty1 empty
# pick sha-commit-empty2 empty

zmień to na:

# change commit B's author
pick sha-commit-empty1 empty
squash sha-commit-B some message
# leave commit C alone
pick sha-commit-C some message
# change commit D's author
pick sha-commit-empty2 empty
squash sha-commit-D some message
# leave commit E-F alone
pick sha-commit-E some message
pick sha-commit-F some message

Poprosi Cię o edycję wiadomości:

# This is a combination of 2 commits.
# The first commit's message is:

empty

# This is the 2nd commit message:

...some useful commit message there...

i możesz po prostu usunąć kilka pierwszych wierszy.


16

W odpowiedzi na odpowiedź Eugena Konkova , aby rozpocząć od głównego zatwierdzenia, użyj --rootflagi. --no-editFlaga jest też pomocny

git rebase --root --exec "git commit --amend --author='name <email>' --no-edit"

To działało i zmieniło się we wszystkich zatwierdzeniach.
SagarKapasi099

1
Dziękuję za odpowiedź. Musiał dodać --interactive, aby działał. git rebase --root --interactive --exec "git commit --amend --author = 'name <email>' --no-edit"
Sreeragh AR 24.08.19

8

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:

git config user.name "New User"
git config user.email "newuser@gmail.com"

git log
git rebase -i 1f1357
# change the word 'pick' to 'edit', save and exit

git commit --amend --reset-author --no-edit
git rebase --continue

git push --force-with-lease

szczegółowe operacje

  • pokaż dzienniki zmian i znajdź identyfikator zatwierdzenia przed zatwierdzeniem, który chcesz zmienić:
git log
  • git rebase zaczyna od wybranego identyfikatora zatwierdzenia do ostatniego odwrotnie:
git config user.name "New User"
git config user.email "newuser@gmail.com"
git rebase -i 1f1357

# change word pick to edit, save and exit
edit 809b8f7 change code order 
pick 9baaae5 add prometheus monitor kubernetes
edit 5d726c3 fix liquid escape issue   
edit 3a5f98f update tags
pick 816e21c add prometheus monitor kubernetes
  • rebase zatrzyma się przy następnym zatwierdzeniu id, wyjście:
Stopped at 809b8f7...  change code order 
You can amend the commit now, with
  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
  • potwierdź i kontynuuj swój rebase, aż do pomyślnego refs/heads/master.
# each continue will show you an amend message
# use git commit --amend --reset-author --no-edit to comfirm
# use git rebase --skip to skip
git commit --amend --reset-author --no-edit
git rebase --continue
git commit --amend --reset-author --no-edit
...
git rebase --continue
Successfully rebased and updated refs/heads/master.
  • git push, aby zaktualizować
git push --force-with-lease

5

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.


Myślę, że to najprostszy sposób na zrobienie tego. Używałem polecenia reword i to się nie udaje. Nauczyłem się, że zamiast tego muszę użyć polecenia edycji. Być może słowo kluczowe „edytuj” można wyróżnić. Dzięki za odpowiedź @ChannaB 👍
Berk

bardzo łatwe do wykonania kroki. Dziękuję Ci!
Habiba

4

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:

git checkout develop

Utwórz z niego nowy oddział:

git checkout -b myFeature develop 

Scal go bez informacji o zatwierdzeniu jako jedno zatwierdzenie:

git merge --no-commit --squash branchWrongAuthor

Możesz także wprowadzić zmiany:

git stage .

Zmień nazwisko autora i zatwierdź zmiany:

git commit --amend --author "New Author Name <New Author Email>" -m "new feature added"

I to wszystko, możesz wprowadzić zmiany.

git push

Następnie możesz usunąć oddział z niewłaściwym autorem.


4

Kroki zmiany nazwy autora po wciśnięciu zatwierdzenia

  1. Najpierw wpisz „git log”, aby uzyskać identyfikator zatwierdzenia i więcej szczegółów
  2. 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.

  3. Następnie wpisz „git rebase --continue” lub „git rebase --abort” zgodnie z potrzebami

    • teraz otwarte zostanie okno bazy danych, kliknij klawisz „i” na klawiaturze
    • wtedy dostaniesz listę zatwierdzeń do 10 [ponieważ minęliśmy 10 zatwierdzeń powyżej] Jak poniżej

    pick 897fe9e simplify code a little

    pick abb60f9 add new feature

    pick dc18f70 bugfix

  4. 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 <author.name@mail.com>' pick abb60f9 add new feature exec git commit --amend --author 'Author Name <author.name@mail.com>' pick dc18f70 bugfix exec git commit --amend --author 'Author Name <author.name@mail.com>'

    1. To wszystko, teraz wystarczy nacisnąć ESC: wq i wszystko gotowe

    2. Następnie git push origin HEAD: BRANCH NAME -f [zadbaj o -f Force push]

    jak git push -flubgit push origin HEAD: dev -f


świetna odpowiedź, czy możesz zaktualizować punkt 6 za pomocą git pushpolecenia?
Łukasz „Severiaan” Grela,

1
@ Lukasz'Severiaan'Grela zredagowany, sprawdź teraz, Dzięki
Kirtikumar A.

3

Globalna zmiana nazwy osoby odpowiedzialnej i adresu e-mail:

$ git config --global user.name "John Doe"
$ git config --global user.email "john@doe.org"

Zmiana nazwy osoby odpowiedzialnej i adresu e-mail dla repozytorium:

$ git config user.name "John Doe"
$ git config user.email "john@doe.org"

Zmiana informacji o autorze tylko do następnego zatwierdzenia:

$ git commit --author="John Doe <john@doe.org>"

Wskazówka : w innej sytuacji i przeczytaj więcej informacji przeczytaj odnośnik do wpisu .


2

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ą:

git push -f origin last_commit_hash:branch_name 

zmień nazwę autora swojego zatwierdzenia za pomocą:

git commit --amend --author "type new author here"

Wyjdź z edytora, który się otworzy i ponownie wciśnij kod:

git push

2

W przypadku komunikatu zatwierdzenia rebasekorespondencji 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.

git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch

Te trzy wiersze kodu wykonały zadanie zmiany komunikatu zatwierdzenia scalania (jak autor).


1

możesz użyć tych poleceń z oficjalnej strony github

https://help.github.com/en/github/using-git/changing-author-info

oto polecenia

#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

tutaj możesz zmienić stary adres e-mail na nową nazwę użytkownika i adres e-mail.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.