Kaip pakeisti įsipareigojimo autorių vienam konkrečiam įvykiui?

Noriu pakeisti vieno konkretaus įvykio autorių istorijoje. Tai nėra paskutinis įvykis.

Žinau apie šį klausimą - kaip galiu pakeisti įsipareigojimo autorių git?

Bet aš galvoju apie kažką, kur įvardijau įvykį pagal maišą ar trumpą maišą.

1564
15 июня '10 в 7:00 2010-06-15 07:00 „MicTech“ nustatė birželio 15 d ., 10 val., 07:00, 2010-06-15 07:00
@ 9 atsakymai

Interaktyvus perkrovimas iš anksčiau buvusio taško nei įsipareigojimas, kurį reikia keisti ( git rebase -i <earliercommit> ). Perkeltų įsipareigojimų sąraše pakeiskite tekstą iš pick norite edit šalia to, kurį norite pakeisti. Tada, kai „git“ paragina pakeisti įsipareigojimą, naudokite:

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

Pavyzdžiui, jei jūsų ABCDE-f įvykdo istoriją su F HEAD , ir norite pakeisti C ir D autorių, tada jūs ...

  1. Nurodykite git rebase -i B ( čia pateikiamas pavyzdys, ką matysite atlikus komandą git rebase -i B )
    • jei reikia redaguoti A , naudokite git rebase -i --root
  2. pakeiskite eilutes, skirtas C ir Dedit
  3. Kai tik prasideda atkūrimas, jis pirmiausia sustos C
  4. Turite git commit --amend --author="Author Name <email@address.com>"
  5. Tada git rebase --continue
  6. Tai vėl sustos D
  7. Tada vėl turite git commit --amend --author="Author Name <email@address.com>"
  8. git rebase --continue
  9. Perkėlimas bus baigtas.
  10. Naudokite „ git push -f kad atnaujintumėte šaltinį su atnaujintais įsipareigojimais.
2672
15 июня '10 в 7:31 2010-06-15 07:31 atsakymas buvo duotas „ Amber“ birželio 15 d

Priimtas atsakymas į šį klausimą yra stebėtinai protingas interaktyvaus perkėlimo naudojimas, tačiau, deja, tai sukelia konfliktus, jei autorius, kurį bandome pakeisti, autorius naudoja filialui, kuris vėliau buvo sujungtas. Apskritai, tai neveikia apdorojant nešvarias istorijas.

Kadangi bijo paleisti scenarijus, kurie priklauso nuo aplinkos kintamųjų nustatymo ir iš naujo nustatymo, kad būtų perrašyta git istorija, rašau naują atsakymą, pagrįstą šiuo paštu, kuris yra panašus į šį atsakymą, bet yra išsamesnis.

Priešingai nei susijęs atsakymas, išbandoma ir atliekama ši veikla. Tarkime, kad 03f482d6 yra tas, kad 03f482d6 yra įsipareigojimas, kurio autorius mes bandome pakeisti, o 42627abe - tai įsipareigojimas su nauju autoriu.

  1. Padaryti įsipareigojimą, kurį bandome pakeisti.

     git checkout 03f482d6 
  2. Pakeiskite autorių.

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

    Dabar mes turime naują įsipareigojimą, kurio hash yra lygus 42627abe .

  3. Išsiųskite pradinį filialą.

  4. Vietoje pakeiskite seną įsipareigojimą nauju.

     git replace 03f482d6 42627abe 
  5. Pakeiskite visus būsimus įsipareigojimus.

     git filter-branch -- --all 
  6. Pašalinkite švaros pakeitimą.

     git replace -d 03f482d6 
  7. Spustelėkite naują istoriją (naudokite tik --force, jei toliau nepavyksta, ir tik patikrinus funkcionalumą su git log ir / arba git diff ).

     git push --force-with-lease 

Vietoj 4-6 galite tiesiog pereiti prie naujo įsipareigojimo:

 git rebase -i 42627abe 
369
04 марта '15 в 5:11 2015-03-04 05:11 atsakymas pateikiamas merlin2011 kovo 04 '15 , 5:11 2015-03-04 05:11
09 июня '15 в 19:02 2015-06-09 19:02 Atsakymą pateikė olivieradam666 birželio 09 '15 , 19:02 2015-06-09 19:02
  • Atstatykite savo el. Pašto adresą konfigūracijoje:

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

  • Dabar iš naujo nustatykite savo įsipareigojimo autorių be redagavimo:

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

82
05 апр. atsakymas pateikiamas pravbeatle 05 Apr 2017-04-05 15:44 '17, 13:44 pm 2017-04-05 15:44

Paskutinio įvykio autorių galite pakeisti naudodami toliau nurodytą komandą.

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

Tačiau, jei norite pakeisti daugiau nei vieną autoriaus vardą, tai šiek tiek sunku. Turite pradėti interaktyvų diegimą iš naujo, tada ženklas priskiriamas teisingai, po to juos keiskite po vieną ir užbaigite.

Pradėkite perkrauti su git rebase -i . Jis jums parodys kažką panašaus.

Pakeiskite pick raktinį žodį, kurį norite edit , jei norite pakeisti autoriaus vardą.

Tada uždarykite redaktorių. Pradedantiesiems paspauskite Escape , tada įveskite :wq ir paspauskite Enter .

Tada pamatysite savo terminalą taip, tarsi nieko nebūtų. Jūs iš tikrųjų esate interaktyvios permutacijos viduryje. Dabar atėjo laikas pakeisti savo autoriaus vardą, naudodami aukščiau nurodytą komandą. Jis vėl atidarys redaktorių. Uždarykite ir tęskite iš naujo su „ git rebase --continue . Pakartokite tą patį taisymo dydį, kurį norite redaguoti. Ar galite įsitikinti, kad interaktyvi santrauka baigėsi, kai gausite pranešimą „ No rebase in progress? .

69
29 авг. atsakymą pateikė Fatih 29 rug. 2015-08-29 03:52 '15 at 3:52 2015-08-29 03:52

Atsakymai į klausimą, su kuriuo esate susieti, yra geri atsakymai ir padengia jūsų situaciją (kitas klausimas yra bendresnis, nes tai apima keleto įsipareigojimų perrašymą).

Kaip pretekstas rinkti „ git filter-branch parašiau scenarijų, kad perrašytumėte autoriaus vardą ir (arba) autoriaus el. Paštą šiam įsipareigojimui:

15 июня '10 в 8:24 2010-06-15 08:24 Chris Johnsen atsakymas, pateiktas birželio 15 d. 10 val. 8:24 2010-06-15 08:24

Vykdant git rebase -i dokumente yra šis įdomus bitas:

Jei norite atstatyti du ar daugiau įsipareigojimų į vieną, pakeiskite komandą "pick" antruoju ir vėlesniais "fixup" "squash" arba "fixup" . Jei įsipareigojimai turėjo skirtingus autorius, sulankstytas fiksatorius bus priskirtas pirmojo įsipareigojimo autoriui. Siūlomas įsipareigojimo pranešimas sulankstytam "fixup" yra pirmojo "fixup" pranešimų su "squash" komanda susiejimas, bet praleidžia įsipareigojimo pranešimus su "fixup" .

  • Jei turite istoriją ABCDEF ,
  • ir norite pakeisti B ir D (= 2 įsipareigojimus),

tada galite padaryti:

  • git config user.name "Correct new name"
  • git config user.email "correct@new.email"
  • sukurti tuščius įsipareigojimus (po vieną kiekvienam įsipareigojimui):
    • jums reikia pranešimo persiuntimo tikslais
    • git commit --allow-empty -m "empty"
  • paleisti perkrovimo operaciją
    • git rebase -i B^
    • B^ pasirenka pagrindinį elementą B
  • prieš kiekvieną kartą reikia pakeisti vieną tuščią prievolę
  • Jiems reikia keisti squash .

Pavyzdys, ką git rebase -i B^ suteiks jums:

 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 

pakeisti jį į:

 # change commit B 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 author pick sha-commit-empty2 empty squash sha-commit-D some message # leave commit EF alone pick sha-commit-E some message pick sha-commit-F some message 

Jis paprašys jus redaguoti pranešimus:

 # This is a combination of 2 commits. # The first commit message is: empty # This is the 2nd commit message: ...some useful commit message there... 

ir galite tiesiog ištrinti pirmas kelias eilutes.

12
28 авг. atsakymas pateikiamas 28 d. 2013-08-28 04:03 '13, 4:03 2013-08-28 04:03

Dar vienas žingsnis į gintaro atsakymą, jei naudojate centrinę saugyklą:

priversti centrinę saugyklą atnaujinti.

Būkite atsargūs, kad viename skyriuje nebūtų daug žmonių, nes tai gali sukelti nuoseklumo praradimą.

11
20 дек. Atsakymą pateikė Fabian76 . 2013-12-20 18:06 '13, 18:06, 2013-12-20 18:06

Nustatyti prieš:

2019

Žr. Kitus klausimus apie „ žymes arba užduokite klausimą