Git

Kako razbiti Git Commits

Kako razbiti Git Commits

Kako skleniti zaveze v Gitu, da bo vaša zgodovina čista

Ko delate z Gitom, je dobro, da se pogosto zavežete, tako da se lahko vedno vrnete v stanje kode, če zamočite. Vendar predaja vseh teh mini sprememb glavni veji ni vedno dobra ideja. Zgodovina je neurejena in ji je težko slediti.

Git ponuja način, kako z ukazom rebase zmečkati kup svojih opravkov. Ko lokalno spremenite določeno datoteko ali določeno funkcijo, lahko vedno uporabite metodo squash, da spremembe združite, preden se prijavite v glavno vejo. To bo pomagalo drugim bolje razumeti vaše spremembe.

Opozorilo: Čeprav lahko vlečete iz zunanjih skladišč in sklepate squash, je to slaba ideja. Lahko ustvari konflikte in zmedo. Izogibajte se spreminjanju zgodovine, ki je že javna. Držite se samo sklepov, ki so lokalni za vaše delo.

Poglejmo primer primera.

Recimo, da imamo dve datoteki a.py in b.py. Najprej pojdimo skozi postopek ustvarjanja datotek in sprememb:

$ mkdir mojprojekt
$ cd myproject /
$ git init
$ echo "print (" hello A ")"> a.py
$ git add -A && git commit -m "Dodan a.pi "
$ echo "print (" hello B ")"> b.py
$ git add -A && git commit -m "Dodano b.pi "
$ echo "print (" hello BB ")"> b.py
$ git add -A && git commit -m "b.py Sprememba 1 "
$ echo "print (" hello BBB ")"> b.py
$ git add -A && git commit -m "b.py sprememba 2 "

Če preverimo zgodovino prevzema obveznosti, bomo videli naslednje:

$ git log --oneline --graph --decorate
* dfc0295 (HEAD -> master) b.py Sprememba 2
* ce9e582 b.py Sprememba 1
* 7a62538 Dodano b.py
* 952244a Dodan a.py

Ko končamo z delom, se odločimo, da bomo vse spremembe dali v b.py v eno obveznost zaradi jasnosti. Štejemo, da so na b.py iz GLAVE. Izdali smo naslednji ukaz:

git rebase -i HEAD ~ 3

Možnost -i Gitu sporoča, naj uporabi interaktivni način.

V vašem urejevalniku besedil Git bi se moralo odpreti okno:

pick 7a62538 Dodano b.py
pick ce9e582 b.py Sprememba 1
izberite dfc0295 b.py Sprememba 2
 
# Prenovite 952244a… dfc0295 na 952244a (3 ukazi)
#
# Ukazi:
# p, pick = uporabi prijavo
# r, reword = uporabi prijavo, vendar uredite sporočilo objave
# e, edit = uporabi prijavo, vendar se ustavite zaradi sprememb
# s, squash = uporabi prijavo, vendar združitev s prejšnjo odobritvijo
# f, fixup = kot "squash", vendar zavrzite sporočilo dnevnika tega predaja
# x, exec = ukaz run (preostanek vrstice) z uporabo lupine
#
# Te vrstice je mogoče ponovno naročiti; izvajajo se od zgoraj navzdol.
#
# Če tukaj odstranite vrstico, TA NAROČILA BODO IZGUBLJENA.
#
# Če pa vse odstranite, bo ponovna zbirka prekinjena.
#
# Upoštevajte, da so prazni prevzemi komentirani
~

Obveze so kronološko navedene na vrhu od najzgodnejših do najnovejših. Izberete lahko, katero obveznost boste "izbrali" in katero se boste založili. Za poenostavitev bomo izbrali prvo oddajo, preostalo pa zmečkali vanjo. Torej bomo besedilo spremenili takole:

pick 7a62538 Dodano b.py
buča ce9e582 b.py Sprememba 1
skvoš dfc0295 b.py Sprememba 2
 
# Prenovite 952244a… dfc0295 na 952244a (3 ukazi)
#
# Ukazi:
# p, pick = uporabi prijavo
# r, reword = uporabi prijavo, vendar uredite sporočilo objave
# e, edit = uporabi prijavo, vendar se ustavite zaradi sprememb
# s, squash = uporabi prijavo, vendar združitev s prejšnjo odobritvijo
# f, fixup = kot "squash", vendar zavrzite sporočilo dnevnika tega predaja
# x, exec = ukaz run (preostanek vrstice) z uporabo lupine
#
# Te vrstice je mogoče ponovno naročiti; izvajajo se od zgoraj navzdol.
#
# Če tukaj odstranite vrstico, TA NAROČILA BODO IZGUBLJENA.
#
# Če pa vse odstranite, bo ponovna zbirka prekinjena.
#
# Upoštevajte, da so prazni prevzemi komentirani

Takoj ko shranite in zaprete besedilno datoteko, se prikaže drugo besedilno okno, ki je videti takole:

# To je kombinacija 3 prevzemov.
# Prvo sporočilo objave je:
Dodano b.py
 
# To je drugo sporočilo o objavi:
 
b.py Sprememba 1
 
# To je tretje sporočilo o objavi:
 
b.py Sprememba 2
 
# Prosimo, vnesite sporočilo za prevzem sprememb. Proge se začnejo
# z '#' bo prezrt, prazno sporočilo pa prekine objavo.
#
# Datum: petek, 30. mar. 21:09:43 2018 -0700
#
# prenova podatkov v teku; na 952244a
# Trenutno urejate predajo med ponovnim prilagajanjem podružnice 'master' na '952244a'.
#
# Spremenjene spremembe:
# Nova datoteka: b.py
#

Shranite in zaprite tudi to datoteko. Morali bi videti nekaj takega:

$ git rebase -i HEAD ~ 3
[samostojna GLAVA 0798991] Dodano b.py
Datum: petek, 30. mar. 21:09:43 2018 -0700
1 datoteka spremenjena, 1 vstavitev (+)
ustvari način 100644 b.py
Uspešno rebazirani in posodobljeni refs / heads / master.

Če zdaj preverite zgodovino predaj:

$ git log --oneline --graph --decorate
* 0798991 (HEAD -> master) Dodano b.py
* 952244a Dodan a.py

Vsi prevzemi za b.py so bili stisnjeni v eno objavo. To lahko preverite tako, da pogledate b.datoteka py:

$ mačka b.py
tiskanje ("zdravo BBB")

Vsebina je spremembe 2.

Zaključek

Prenova je močan ukaz. Pomaga vam lahko pri čiščenju zgodovine. Vendar se izogibajte uporabi za že javne obveznosti, saj lahko povzroči konflikte in zmedo. Uporabite ga samo za svoje lokalno skladišče.

Nadaljni študij:

Kako prikazati števec FPS v igrah Linux
Linux gaming je dobil velik zagon, ko je Valve leta 2012 napovedal podporo Linuxu za odjemalca Steam in njihove igre. Od takrat se je veliko AAA in in...
Kako prenesti in igrati Sid Meier's Civilization VI v Linuxu
Uvod v igro Civilization 6 je sodoben pogled na klasični koncept, uveden v seriji iger Age of Empires. Ideja je bila dokaj preprosta; začeli bi v zelo...
Kako namestiti in igrati Doom v Linuxu
Uvod v Doom Serija Doom je nastala v devetdesetih letih po izidu prvotnega Dooma. Bil je takojšen hit in od takrat naprej je serija iger prejela števi...