zur Startseite

Druckausgabe von https://privat.albicker.org
Iveco Daily 4x4, Hunde und multithematisches Blog

git für Nicht-Programmierer - Teil 3 - Versionsstände untersuchen und wiederherstellen

veröffentlicht am 19.11.2019 mit 1051 Worten - Lesezeit: 5 Minute(n) in * PROGRAMME * SOFTWARE * TUTORIALS *

Inhaltsverzeichnis

 

Diese Folge des git-Tutorials schließt sich unmittelbar an den in Teil2 beschriebenen Arbeitsablauf an. Dort haben wir mit Dateien gearbeitet und Änderungen als Commits in git gespeichert. Nun wollen wir die gespeicherten Zustände ansehen und “zurückholen”.

Arbeiten mit ‘commits’

Commits auflisten

Eine Liste dieser gespeicherten Arbeitsschritte (= commits) erhält man mittels git log:

~/Webseiten/homepage $ git log
commit 4b0da1b8b4ea7a2121584da2d9720ea9aa145e38
Author: {benutzername} <mail@domain.tld>
Date:   Mon Nov 13 11:24:38 2017 +0100

    Demo-Commit fuer Tutorial

commit fd25c3f263236b7e15170b8e4c3ec6b49bb5748f
Author: {benutzername} <mail@domain.tld>
Date:   Sun Nov 12 14:32:14 2017 +0100

    git Tutorial Teil 2 erstellt

commit e41d68aeedc513994b0b72bfabcb0ae87a7c3970
Author: {benutzername} <mail@domain.tld>
Date:   Sat Nov 4 11:53:16 2017 +0100

    neue Artikel und Kommentare

commit bb3db0fc5bebeb7487496fd356b7174c14e5ae0e
Author: {benutzername} <mail@domain.tld>
Date:   Thu Mar 23 18:02:04 2017 +0100

    sitemap.xml angepaßt auf echte Seiten

commit xyz0815.....
(...)

Dabei fällt auf, daß die nacheinander gespeicherten Commits als “Namen” 40-stellige - zufällig aussehende - Codes tragen, sog. “Hashes”. Alle Commits in Git werden nach ihrer SHA-1-Summe benannt (Commit-ID), die aus dem Inhalt und den Metadaten des Commits errechnet wird - quasi ein Fingerabdruck des Inhalts des Commits. Der Hash ist also sozusagen eine inhaltsabhängige Versionsnummer.
Für den Umgang mit Commits reicht i. A. die Angabe der ersten 7 Stellen des Hash des jeweiligen Commits.

Bei langen Listen (länger als eine Bildschirmseite) kann mit den Pfeiltasten nach oben und unten gescrollt werden, mit q wird der Vorgang beendet.

Eine Kurzfassung kann man so erhalten:

~/Webseiten/homepage $ git log --oneline
d2b920f Artikel hinzugefügt und aktualisiert
28bb101 Demo-Commit fuer Tutorial
fd25c3f git Tutorial Teil 2 erstellt
e41d68a neue Artikel und Kommentare
bb3db0f sitemap.xml angepaßt auf echte Seiten
07dac1a Social Media integriert
(...)

Durch Anhängen von Pfad und Dateiname können die Änderungszeitpunkte für eine bestimmte Datei, hier schrift.css, ermittelt werden:

~/Webseiten/homepage $ git log themes/{name}/static/css/schrift.css
commit 4b0da1b8b4ea7a2121584da2d9720ea9aa145e38
Author: {benutzername} <mail@domain.tld>
Date:   Mon Nov 13 11:24:38 2017 +0100

    Demo-Commit fuer Tutorial

commit 07dac1a9acc205b9a6d74c0f8cbaa4ea73556a17
Author: {benutzername} <mail@domain.tld>
Date:   Mon Mar 20 21:06:19 2017 +0100

    Social Media integriert

commit c2e1d473078219567a7e8778c7b6289d76d4dad6
Author: {benutzername} <mail@domain.tld>
Date:   Sun Mar 19 12:10:22 2017 +0100

    Templates überarbeitet => <small> ersetzt

commit 8a854691a56d6975f6d63b77e2aa5180082c9cf4
Author: {benutzername} <mail@domain.tld>
Date:   Sat Mar 18 22:44:53 2017 +0100

    margin/padding global=0, Buttons Seitenleiste nahtlos

commit 92b0ce8dd9277717c60b10940326dfecd22fa818
Author: {benutzername} <mail@domain.tld>
Date:   Fri Mar 3 19:20:01 2017 +0100

    Startzustand

Commits einsehen

Nach der Änderungshistorie ist es auch hilfreich zu sehen, was denn konkret in einem bestimmten commit geändert wurde.
Die Zusammenfassung wird durch git log mit der Option --stat ausgegeben, man sieht, welche Dateien in welchem Umfang geändert wurden, hier: in 2 Dateien wurden 102 Löschungen und 292 Einfügungen getätigt:

~/Webseiten/homepage $ git log --stat fd25c3f
commit fd25c3f263236b7e15170b8e4c3ec6b49bb5748f
Author: {benutzername} <mail@domain.tld>
Date:   Sun Nov 12 14:32:14 2017 +0100

    git Tutorial Teil 2 erstellt

 content/blog/2017-10-12-start-mit-git-teil2.md | 102 ---------
 content/blog/2017-11-12-start-mit-git-teil2.md | 292 +++++++++++++++++++++++++
 2 files changed, 292 insertions(+), 102 deletions(-)

Um Änderungen selbst sichtbar zu machen, hilft wieder das Kommando git log, diesmal ergänzt um die Option -p. Hängt man noch die Kennung eines Commits an, so werden nur die Änderungen darin angezeigt:

~/Webseiten/homepage $ git log -p 28bb101
commit 28bb101aece84070ae4987069f7ab11ecdf1a12f
Author: {benutzername} <mail@domain.tld>
Date:   Mon Nov 13 11:24:38 2017 +0100

    Demo-Commit fuer Tutorial

diff --git a/content/blog/2017-11-12-start-mit-git-teil2.md b/content/blog/2017-11-12-start-mit-git-teil2.md
index 670f414..07bdbc0 100644
--- a/content/blog/2017-11-12-start-mit-git-teil2.md
+++ b/content/blog/2017-11-12-start-mit-git-teil2.md
@@ -1,7 +1,7 @@
 +++
-title       = "git für Nicht-Programmierer - Teil 2 - Versionsstände erstellen und wiederherstellen"
+title       = "git für Nicht-Programmierer - Teil 2 - Dateien in der Versionskontrolle"
 date        = "2017-11-12"
-description = "git ist eingerichtet. Wie kann ich es jetzt für meine Arbeit auf meinem lokalen Rechner nutzen?"
+description = "git ist eingerichtet. Wie gehe ich jetzt mit Dateien innerhalb 'git' auf meinem lokalen Rechner um?"

Title und description wurden geändert, also wurde die alte Fassung mit - als entfernt gekennzeichnet, und stattdessen die neue Fassung mit + hinzugefügt.

Ein weiteres nützliches Kommando ist git diff: auch damit kann man Änderungen darstellen, hier als Beispiel die Differenz einer Datei zwischen zwei aufeinanderfolgenden commits (es wurde die Schriftgröße geändert):

~/Webseiten/homepage  $ git diff fd25c3f 28bb101 themes/tutorial/static/css/schrift.css
diff --git a/themes/tutorial/static/css/schrift.css b/themes/tutorial/static/css/schrift.css
index b74d563..886f428 100644
--- a/themes/tutorial/static/css/schrift.css
+++ b/themes/tutorial/static/css/schrift.css
@@ -75,7 +75,7 @@ pre {
     padding : 0.625em;
     border : 1px solid #505050;
     border-radius: 0.625em;
-    font-size: 1em;
+    font-size: 1.25em;
     line-height: 1.25em;
 }
 /* umrandeter Kasten */

Mehr zu den Optionen und Möglichkeiten findet sich in der Hilfe zum Befehl:

$ git diff --help

Zurückgehen zu einem alten Stand/Commit

Manchmal stellt sich nach einigen Arbeitsschritten heraus, daß eine begonnene Änderung ‘auf den Holzweg’ führt und man möchte die letzten Schritte insgesamt rückgängig machen. Das kann man tun, indem man zu dem letzten Commit vor Beginn der Arbeit an dieser Änderung zurückspringt - diesen kann man, wie oben gezeigt, durch git log ermitteln:

~/Webseiten/homepage $ git reset 28bb101

Man springt damit in der git-Historie auf den angegebenen commit zurück und die nachfolgenden commits hängen jetzt quasi “in der Luft”. Sie werden gelöscht, sobald git das nächste Mal eine Speicherbereinigung durchführt.

Einzelne (oder mehrere) Datei(en) aus altem Commit holen

Das kann nötig sein, wenn man irgendwann mal eine oder mehrere Dateien gelöscht hat, diese später aber wieder braucht. Hierzu wird der Befehl git checkout verwendet, gefolgt von der Kennung des entsprechenden alten commits und (der Aufzählung) der Datei(en), die von dort geholt werden sollen:

~/Webseiten/homepage $ git checkout 28bb101 /content/blog/2017-11-12-start-mit-git-teil2.md

Will man nur einen alten Stand der Datei selbst ansehen, dann hilft git show weiter:

~/Webseiten/homepage $ git show fd25c3f:content/blog/2017-11-12-start-mit-git-teil2.md
+++
title       = "git für Nicht-Programmierer - Teil 2 - Versionsstände erstellen und wiederherstellen"
date        = "2017-11-12"
description = "git ist eingerichtet. Wie kann ich es jetzt für meine Arbeit auf meinem lokalen Rechner nutzen?"
keywords    = "git, Versionskontrolle, "
software    = ["Webseiten", "Programmieren"]
programme   = ["git"]
tutorials   = ["git"]

+++

Auf Basis des [Grundlagenartikels](/blog/2017-03-01-start-mit-git-grundlegendes.html) mit einer Erklärung des Programmes `git` und den Aufgaben und Möglichkeiten, die eine Versionsverwaltung bietet, ging es im [Teil 1 dieser Serie](/blog/2017-03-02-start-mit-git-teil1.html) um die Installation und Einrichtung von `git`. Heute geht es um die Erläuterung der wesentlichen Arbeitsschritte bei der Nutzung von `git`.<!--more--> 

## git benutzen
### Das Nutzungsszenario
Ich gehe im Rahmen dieses Teils des Tutorials von einem Entwickler oder Autor aus, der Schritt für Schritt einzelne Teilaufgaben eines Projekts abarbeitet - und das nur lokal auf seinem eigenen Rechner:

![Struktur von git](/bilder/2017-11/git-diagramm-lokal-linear.png)

Der Einfachheit halber stammen alle Beispiele aus der Erstellung dieses Tutorials im Rahmen meiner [Hugo](/programme/hugo.html)-Webseite.

### Ein File verändern
Im [Teil 1 dieser Serie](/blog/2017-03-02-start-mit-git-teil1.html) haben wir ein bestehendes Projekt mittels `git init`der Version (...)

 

weitere Artikel