Daten ändern

Was passiert jetzt, wenn wir die Dateien wieder ändern? Also ändern wir mal eine unserer Testdateien…, z.B. indem wir eine zusätzliche Zeile hinzufügen:

$ cat testdatei.txt
Zeile 1
Zeile 2
Diese Zeile geändert, nach dem ersten Commit für diese und andere Datei!

Das ergibt jetzt den folgenden Status:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   testdatei.txt

no changes added to commit (use "git add" and/or "git commit -a")
$ git status -s
 M testdatei.txt

Also: die Datei im Working Directory weicht vom Zusstand im Index ab! Beachten: hier M in Spalte 2 bei short Status.

Wir aktualisieren die Änderung - fügen also mit git add die Datei wieder aktuell zum Index.

$ git add testdatei.txt
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   testdatei.txt
$ git status -s
M  testdatei.txt

Analyse: die Datei liegt jetzt modified/geändert im Index und ist in dieser Variante für den nächsten Commit vorbereitet.

Jetzt ändern wir die Datei nochmals und schauen uns den Status der Datei in Git an.

$ cat testdatei.txt
Zeile 1
Zeile 2
Diese Zeile geändert, nach dem ersten Commit für diese und andere Datei!
Diese Zeile nach dem add-en der Datei, also dem Hinzufügen zum Index!
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   testdatei.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   testdatei.txt

$ git status -s
MM testdatei.txt

Drei Zustände für eine Datei!

Wenn man so will hat das Git jetzt drei Dateizustände einer Datei testdatei.txt:

  1. Lokale Datei im Git-Ordner - aktuellste (lokale) Bearbeitung: 4 Zeilen

  2. Datei im Index (Staging Area) - nach letztem git add: 3 Zeilen

  3. Datei im .git-Repository - nach letztem/ersten git commit: 2 Zeilen (siehe git show)

Wir analysieren das mal der Reihe nach mit ein paar Profi-Aufrufen - Plumbing Git Commands statt Porcelain Git Commands:

  1. Lokale Datei - einfaches cat

    $ cat testdatei.txt
    Zeile 1
    Zeile 2
    Diese Zeile geändert, nach dem ersten Commit für diese und andere Datei!
    Diese Zeile nach dem add-en der Datei, also dem Hinzufügen zum Index!
    
  2. Datei im Index (Staging Area):

    $ git ls-files --stage
    100644 c3e447123530f753dbdf7141ed7034609e2fba46 0       testdatei.txt
    100644 a33806c56de8e2635b91c78953286fdba2a6ad57 0       testdatei2.txt
    
    $ git cat-file -p c3e447123530f753dbdf7141ed7034609e2fba46
    Zeile 1
    Zeile 2
    Diese Zeile geändert, nach dem ersten Commit für diese und andere Datei!
    
  3. Datei im Git Repository: gerne mit einfachem (oder fein definiertem und dateibezogenen) git show:

    $ git show
    commit 636908f2b795b68c4c99f978239be5e274bfea05 (HEAD -> master)
    Author: Joe Brandes <joe.trainer@example.com>
    Date:   Thu Jul 11 14:04:11 2019 +0200
    
        Initial commit; First Commit to .git
    
    diff --git a/testdatei.txt b/testdatei.txt
    new file mode 100644
    index 0000000..2fddc57
    --- /dev/null
    +++ b/testdatei.txt
    @@ -0,0 +1,3 @@
    +Zeile 1
    +Zeile 2
    +
    diff --git a/testdatei2.txt b/testdatei2.txt
    new file mode 100644
    index 0000000..a33806c
    --- /dev/null
    +++ b/testdatei2.txt
    @@ -0,0 +1 @@
    +Text in Datei 2
    
    $ git show HEAD:testdatei.txt
    Zeile 1
    Zeile 2
    

Und wir können uns mit Git auch die Unterschiede mittels git diff präsentieren lassen.

  • git diff - Abweichungen zwischen Workspace und Index (Staging Area)

  • git diff --cached - Abweichungen zwischen Index (Staging Area) und Git Repo

  • git diff HEAD - Abweichungen zwischen Workspace und Git Repo

Die unterschiedlichen Diff-Beispiele sollten wir uns genauer ansehen.