Git 🌙
Chapters ▾ 2nd Edition

7.2 Orodja Git - Interaktivno pripravljanje

Interaktivno pripravljanje

V tem razdelku si bomo ogledali nekaj interaktivnih ukazov Git, ki vam lahko pomagajo oblikovati potrditve tako, da vključujejo samo določene kombinacije in dele datotek. Ta orodja so koristna, če obsežno spreminjate več datotek in se odločite, da želite te spremembe razdeliti na več osredotočenih potrditev namesto ene velike in neurejene potrditve. Tako lahko zagotovite, da so vaše potrditve logične ločene spremembe in jih lahko razvijalci, s katerimi sodelujete, enostavno pregledajo.

Če zaženete git add z možnostjo -i ali --interactive, Git vstopi v interaktivni način lupine in prikaže nekaj takega:

$ git add -i
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now>

Vidite, da ta ukaz prikaže pogled na vaše področje priprave, ki je verjetno drugačen od tistega, ki ste ga navajeni — v osnovi je enak kot pri git status, vendar malo bolj jedrnat in informativen. Na levi strani prikaže spremembe, ki ste jih pripravili na področju za pripravo, na desni strani pa nepripravljene spremembe.

Po tem sledi del »Commands«, ki vam omogoča, da storite veliko stvari, kot sta priprava in odklop datotek, priprava delov datotek, dodajanje nezabeleženih datotek in prikazovanje razlik tistega, kar ste pripravili.

Dodajanje datotek v področje priprave in iz njega

Če vpišete u ali 2 (za posodobitev) pri pozivu What now>, boste vprašani, katere datoteke želite dati v pripravo:

What now> u
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

Da daste v pripravo datoteki TODO in index.html, lahko vpišete številki:

Update>> 1,2
           staged     unstaged path
* 1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

* poleg vsake datoteke pomeni, da je datoteka izbrana za pripravo. Če pritisnete Enter, potem ko pri pozivu Update>> niste ničesar vnesli, Git izbere vse izbrane dele in jih da za vas v področje priprave:

Update>>
updated 2 paths

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> s
           staged     unstaged path
  1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

Zdaj lahko vidite, da sta datoteki TODO in index.html pripravljeni, medtem ko je pa datoteka simplegit.rb še vedno izven področja priprave. Če želite datoteko TODO v tej fazi razveljaviti, uporabite možnost r ali 3 (za razveljavitev):

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> r
           staged     unstaged path
  1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Revert>> 1
           staged     unstaged path
* 1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Revert>> [enter]
reverted one path

Če ponovno pogledate svoje stanje Gita, lahko vidite, da ste dali datoteko TODO izven področja priprave:

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> s
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

Za prikaz sprememb, ki ste jih dodali v pripravo, lahko uporabite ukaz d ali 6 (za razliko). Ta prikaže seznam datotek, ki so bile dodane v področje priprave, in lahko izberete tiste, katerih razlike želite videti. To je precej podobno, kot bi izvedli ukaz git diff --cached v ukazni vrstici:

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> d
           staged     unstaged path
  1:        +1/-1      nothing index.html
Review diff>> 1
diff --git a/index.html b/index.html
index 4d07108..4335f49 100644
--- a/index.html
+++ b/index.html
@@ -16,7 +16,7 @@ Date Finder

 <p id="out">...</p>

-<div id="footer">contact : support@github.com</div>
+<div id="footer">contact : email.support@github.com</div>

 <script type="text/javascript">

S temi osnovnimi ukazi lahko uporabite interaktivni način za dodajanje in tako uporabljate svoje področje priprave veliko bolj enostavno.

Pripravljanje popravkov

Možno je narediti tudi, da Git doda v področje priprave samo posamezne dele datotek, ne pa celotnih datotek. Na primer, če naredite dve spremembi v datoteki simplegit.rb in želite dodati eno spremembo v področje priprave, druge pa ne, to storite v Gitu zelo enostavno. V istem interaktivnem ukazu, kot je pojasnjeno v prejšnjem odstavku, vtipkajte p ali 5 (za programski popravek). Git vas bo vprašal, katere datoteke želite delno dodati v področje priprave, nato pa vam bo za vsak odsek izbrane datoteke prikazal delček razlike datoteke in vas enega za drugim vprašal, ali ga želite dodati v področje priprave:

diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index dd5ecc4..57399e0 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -22,7 +22,7 @@ class SimpleGit
   end

   def log(treeish = 'master')
-    command("git log -n 25 #{treeish}")
+    command("git log -n 30 #{treeish}")
   end

   def blame(path)
Stage this hunk [y,n,a,d,/,j,J,g,e,?]?

V tem trenutku imate veliko možnosti. Če vpišete ?, vam bo izpisalo, kaj lahko naredite:

Stage this hunk [y,n,a,d,/,j,J,g,e,?]? ?
y - stage this hunk
n - do not stage this hunk
a - stage this and all the remaining hunks in the file
d - do not stage this hunk nor any of the remaining hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help

Na splošno boste vpisali y ali n, če želite vsak del datoteke shraniti v področje priprave, vendar je lahko koristno shraniti tudi vse kose v nekaterih datotekah, ali pa preskočiti odločitev za določen kos za kasneje. Če del datoteke shranite v področje priprave in drugega dela ne, bo vaš izpis statusa videti takole:

What now> 1
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:        +1/-1      nothing index.html
  3:        +1/-1        +4/-0 lib/simplegit.rb

Status datoteke simplegit.rb je zanimiv. Prikazuje, da so nekatere vrstice dane v pripravo in nekatere niso. Delno ste dali to datoteko v pripravo. V tem trenutku lahko zapustite interaktivni način dodajanja in začnete z git commit, da potrdite delno pripravljene datoteke.

Prav tako vam ni treba biti v interaktivnem načinu, da izvedete delno pripravo datotek — lahko začnete enaki skript z uporabo git add -p ali git add --patch v ukazni vrstici.

Poleg tega lahko način popravka uporabite za delno ponastavljanje datotek z ukazom git reset --patch, za izvlek delov datotek z ukazom git checkout --patch in za shrambo delov datotek na varno z ukazom git stash save --patch. Več podrobnosti o vsakem od teh ukazov bomo predstavili, ko bomo prišli do naprednejše uporabe teh ukazov.

scroll-to-top