git add¶
Die veränderten Dateien im Working Tree übermitteln wir
mittels git add an den Index.
Im einfachsten Fall könnte man git add -A (für --all)
oder auch git add . (aktuelles Verzeichnis) nutzen.
Dabei verliert man aber beim späterem Nachvollziehen von durchgeführten
Schritten auch ein wenig an Details.
Da man häufig an Ordner-Strukturen arbeitet bietet sich an:
git add Chapter\ (das staged alle Dateien des entsprechenden Ordners)
Wenn man das schrittweise, feingetunte add - commit vernachlässigt hat, dann kann man die entsprechenden Änderungen auch teilweise in den Index schieben und somit dann auch teilweise commiten.
git add –patch - schrittweises/teilweises einchecken von Änderungen
Mit der Option --patch bzw. -p gelangt man in den interaktiven
Modus von git add. Auf diese Weise kann man dann Teile von
Bearbeitungen an Dateien in den Index hinzufügen.
Gründe:
Entwicklungsgeschichte besser erkennbar
Während der Arbeit die kleinteiligen Commits vernachlässigt
Beispiel aus gitbu.ch: Datei hello.pl
# Hello World! in Perl
print "Hello World!\n";
Wird geändert zu:
#!/usr/bin/perl
# Hello World! in Perl
# Author: Valentin Haenel
use strict;
print "Hello World!\n";
Anm.: an dieser Stelle auch mal - zur Erinnerung - die Aufrufe
git diff vs. git diff --staged vergleichen bzw. analysieren.
Kommen wir zum Patch-Mode von git add:
$ git add --patch
diff --git a/hello.pl b/hello.pl
index c6f28d5..1e50e10 100644
--- a/hello.pl
+++ b/hello.pl
@@ -1,2 +1,5 @@
+#!/usr/bin/perl
# Hello World! in Perl
+# Author: Joe B.
+use strict;
print "Hello World!\n";
Stage this hunk [y,n,q,a,d,s,e,?]?s
Wir versuchen den Hunk zu teilen (s für split) und erhalten die folgende Möglichkeit:
Split into 2 hunks.
@@ -1 +1,2 @@
+#!/usr/bin/perl
# Hello World! in Perl
Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? y
@@ -1,2 +2,4 @@
# Hello World! in Perl
+# Author: Joe B.
+use strict;
print "Hello World!\n";
Stage this hunk [y,n,q,a,d,K,g,/,e,?]? n
Wir haben also den ersten Teil übernommen und den zweiten Teil nicht für den Index übernommen!
Hier ein Vergleich von git diff Aufrufen:
$ git diff --staged
diff --git a/hello.pl b/hello.pl
index c6f28d5..d2cc6dc 100644
--- a/hello.pl
+++ b/hello.pl
@@ -1,2 +1,3 @@
+#!/usr/bin/perl
# Hello World! in Perl
print "Hello World!\n";
Und im Working Tree haben wir noch weitere Zeilen:
$ git diff
diff --git a/hello.pl b/hello.pl
index d2cc6dc..1e50e10 100644
--- a/hello.pl
+++ b/hello.pl
@@ -1,3 +1,5 @@
#!/usr/bin/perl
# Hello World! in Perl
+# Author: Joe B.
+use strict;
print "Hello World!\n";