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:

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
- git für Nicht-Programmierer - Teil 2 - Dateien in der Versionskontrolle
- git für Nicht-Programmierer - Teil 1 - Installation und Einrichtung
- git für Nicht-Programmierer - Die Grundlagen
- Hugo und die Krux mit dem Zeilenumbruch
- Trennung von Struktur und Design/Inhalt und Layout