Warning: Creating default object from empty value in /chroot/home/zerotohe/zerotohero.hu/html/wp-content/themes/salient/nectar/redux-framework/ReduxCore/inc/class.redux_filesystem.php on line 29
git-amend | zeroToHero

git-amend

By 2014.12.17Git

Sziasztok!

Most nézzünk meg egy újabb Git feature-t. Alapvetően, egy tökéletes világban úgy használjuk a Git-et, hogy minden elsőre működik, pont úgy használjuk ahogy kell, pont azokat a fájlokat adjuk hozzá a repository-hoz, amit szerettünk volna, tökéletesen be van állítva a felhasználónév-email páros, a commit message pontosan a megfelelő formában van, és teljes mértékben leírja, hogy mit csináltunk az adott commit alkalmával, és végső soron pontosan annyi commitot teszünk, amennyit tennünk kell, véletlenül sem többet.

Ha azt gondolod, hogy tökéletes világban élünk, akkor neked muszáj elolvasnod ezt a bejegyzést :) Miért is? A Git a szervezettség eszköze. A Git segítségével strukturálod a kódbázist és elmondod világnak, hogy ki vagy, mit csináltál, mely release-n tetted azt, stb.

	
$ git init 
Initialized empty Git repository in /tmp/zerotoher_amend/.git/
$ touch start
$ git add start
$ git commit -m "start"
[master (root-commit) bde0600] start
 0 files changed
 create mode 100644 start
$ touch Main.java
$ git add Main.java
$ git commit -m "Skeleton"
[master ce7fc41] Skeleton
 0 files changed
 create mode 100644 Main.java
$ git log
commit ce7fc417cd2a3078a6f3e2887984db5145a47c3a
Author: Attila Budai <attila.budai@zerotohero.hu>

    Skeleton

commit bde0600921b6b62cf9c9fbc5ab044dca46365cf8
Author: Attila Budai <attila.budai@zerotohero.hu>

    start
$ 

Nos, ez az a pont, amikor rájövünk, hogy a „Skeleton” nem igazán fedi azt a valóságot, amikor én hozzáadtam egy üres Main.java fájlt :) Tehát, nem hagyhatom így, hiszen hazudik a commit message, módosítsuk.

Megjegyzés: Meg fogja nyitni a default editor-t, amiben átírható a commit message.

	
$ git commit --amend
[master 1bbf7c8] Main.java
 0 files changed
 create mode 100644 Main.java
$ git log
commit 1bbf7c847cf3e35213c1f3513b9eda176986f841
Author: Attila Budai <attila.budai@zerotohero.hu>

    Main.java

commit bde0600921b6b62cf9c9fbc5ab044dca46365cf8
Author: Attila Budai <attila.budai@zerotohero.hu>

    start
$

Reflog módban látható, hogy mely commitok voltak „amend”-elve :

	
$ git reflog
1bbf7c8 HEAD@{0}: commit (amend): Main.java
ce7fc41 HEAD@{1}: commit: Skeleton
bde0600 HEAD@{2}: commit (initial): start
$

Amikor még kezdő voltam, és alig ismertem a Git-et, akkor történt az alábbi eset. Környezetet tekintve volt egy gerrit, amely megszűri a felhasználónév jelszó alapján, hogy ki commitolhat és hová. A céges laptopon minden szuperül be volt állítva. Viszont aki imád a munkájával eltölteni sok-sok időt, az bizony otthon is dolgozik, és hogy, hogysnem, az otthoni gépemen kimaradt a felhasználónév-email páros beállítás. Commitoltam otthon, majd próbáltam feltolni a központi repóba a művemet. Igenám, de a gerrit azt mondta, hogy Te ki vagy? Neked nem szabad ezen a játszótéren szórakozni, menj máshová, vagy árulj el magadról valamit. Na most kezdő Git userként nem nagyon tudtam a lehetőségeimet sem, a Git előtt SVN-t használtam, de az meg alapvetően nem volt szimpi (sok tudást nem is vettem magamhoz ez ügyben :) ), így ötlet híján a megoldásom: kézzel, manuálisan mappák, fájlok másolgatása ;) Na, hát fantasztikus volt…, de végeredményben meg jó. Nos, ha akkoriban lett volna valaki a közelemben aki ismeri az amend-et, akkor kb fél perc lett volna megoldás…

Játsszuk el az esetemet, beállítok magamnak nem létező adatokat csak a példa kedvéért:

	
$ git config --local user.name "user tmp"
$ git config --local user.email "user@tmp.tmp"
$ touch start
$ git add start
$ git commit -m "start"
[master (root-commit) 04b26f8] start
 0 files changed
 create mode 100644 start
$ git log
commit 04b26f8db8cbefb4cbdf56443abd25b5c605b8bd
Author: user tmp <user@tmp.tmp>

    start
$

Nagyon szuper, látszik szépen, hogy ki volt az, aki elkövette eme nemes tettet :) Most van az a pillanat, amikor rájövünk, hogy a „user tmp” nem jó, így hát javítsuk ki:

	
$ git config --local user.name "Attila Budai"
$ git commit -amend --reset-author

Ugyanúgy van lehetőség módosítani a commit message-t, ahogy az előbb, de ezt most hagyjuk változatlanul, és nézzük meg a log eredményét:

	
$ git log
commit ccde036f887202af201250324ebcd3ebe076f4b7
Author: Attila Budai <user@tmp.tmp>

   start
$

Ugyanezt eljátszva az email címmel is:

	
$ git config --local user.email "attila.budai@zerotohero.hu"
$ git config --local --list
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
user.name=Attila Budai
user.email=attila.budai@zerotohero.hu
$ git commit --amend --reset-author
[master 8a77de2] start
 0 files changed
 create mode 100644 start
$ git log
commit 8a77de21f476d9ac2695fda5a6f3c8f0ad87fa28
Author: Attila Budai <attila.budai@zerotohero.hu>

    start
$ 

Megkapjuk az elvárt eredményt. Annyira nem bonyolult a művelet, inkább a hangsúly azon van, hogy ismerjük a lehetőségeinket, és mindig válasszuk a probléma megoldására legmegfelelőbbet.