-
1. Erste Schritte
- 1.1 Über Versionskontrolle
- 1.2 Eine kurze Geschichte von Git
- 1.3 Was ist Git?
- 1.4 Die Kommandozeile
- 1.5 Git installieren
- 1.6 Erstmalige Git-Einrichtung
- 1.7 Hilfe bekommen
- 1.8 Zusammenfassung
-
2. Git Grundlagen
-
3. Git Branching
- 3.1 Branches im Überblick
- 3.2 Grundlegendes Branching und Merging
- 3.3 Branch-Management
- 3.4 Branching-Workflows
- 3.5 Remote-Branches
- 3.6 Rebasing
- 3.7 Zusammenfassung
-
4. Git auf dem Server
- 4.1 Die Protokolle
- 4.2 Git auf einem Server einrichten
- 4.3 Generieren Ihres SSH-Public-Keys
- 4.4 Einrichten des Servers
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Drittanbieter-Hosting-Optionen
- 4.10 Zusammenfassung
-
5. Verteiltes Git
-
6. GitHub
-
7. Git-Werkzeuge
- 7.1 Revisionsauswahl
- 7.2 Interaktives Staging
- 7.3 Stashing und Bereinigen
- 7.4 Ihre Arbeit signieren
- 7.5 Suchen
- 7.6 Historie umschreiben
- 7.7 Reset entmystifiziert
- 7.8 Fortgeschrittenes Merging
- 7.9 Rerere
- 7.10 Debugging mit Git
- 7.11 Submodule
- 7.12 Bundling
- 7.13 Ersetzen
- 7.14 Credential-Speicher
- 7.15 Zusammenfassung
-
8. Git anpassen
-
9. Git und andere Systeme
- 9.1 Git als Client
- 9.2 Migration zu Git
- 9.3 Zusammenfassung
-
10. Git-Interna
- 10.1 Plumbing und Porcelain
- 10.2 Git-Objekte
- 10.3 Git-Referenzen
- 10.4 Packfiles
- 10.5 Die Refspec
- 10.6 Übertragungsprotokolle
- 10.7 Wartung und Datenwiederherstellung
- 10.8 Umgebungsvariablen
- 10.9 Zusammenfassung
-
Anhang A: Git in anderen Umgebungen
- A1.1 Grafische Oberflächen
- A1.2 Git in Visual Studio
- A1.3 Git in Visual Studio Code
- A1.4 Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git in Sublime Text
- A1.6 Git in Bash
- A1.7 Git in Zsh
- A1.8 Git in PowerShell
- A1.9 Zusammenfassung
-
Anhang B: Git in Ihre Anwendungen einbetten
- A2.1 Kommandozeilen-Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
Anhang C: Git-Befehle
- A3.1 Einrichtung und Konfiguration
- A3.2 Projekte abrufen und erstellen
- A3.3 Grundlegendes Snapshotting
- A3.4 Branching und Merging
- A3.5 Projekte teilen und aktualisieren
- A3.6 Inspektion und Vergleich
- A3.7 Debugging
- A3.8 Patching
- A3.9 E-Mail
- A3.10 Externe Systeme
- A3.11 Administration
- A3.12 Plumbing-Befehle
7.2 Git-Werkzeuge - Interaktives Staging
Interaktives Staging
In diesem Abschnitt werden wir uns einige interaktive Git-Befehle ansehen, die Ihnen helfen können, Ihre Commits so zu gestalten, dass sie nur bestimmte Kombinationen und Teile von Dateien enthalten. Diese Werkzeuge sind hilfreich, wenn Sie eine Reihe von Dateien umfangreich ändern und dann entscheiden, dass Sie diese Änderungen in mehrere fokussierte Commits aufteilen möchten, anstatt in einen großen, unübersichtlichen Commit. Auf diese Weise können Sie sicherstellen, dass Ihre Commits logisch getrennte Änderungen darstellen und von den Entwicklern, mit denen Sie zusammenarbeiten, leicht überprüft werden können.
Wenn Sie git add mit der Option -i oder --interactive ausführen, wechselt Git in einen interaktiven Shell-Modus, der etwa so aussieht:
$ 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>
Sie sehen, dass dieser Befehl eine wesentlich andere Ansicht Ihres Staging-Bereichs zeigt, als Sie es wahrscheinlich gewohnt sind – im Grunde dieselben Informationen wie bei git status, aber etwas prägnanter und informativer. Er listet die von Ihnen gestageten Änderungen auf der linken Seite und die nicht gestagten Änderungen auf der rechten Seite auf.
Danach folgt ein Abschnitt "Befehle", der es Ihnen ermöglicht, verschiedene Dinge zu tun, wie das Stagen und Unstagen von Dateien, das Stagen von Dateiteilen, das Hinzufügen von nicht verfolgten Dateien und das Anzeigen von Diffs der gestagten Inhalte.
Dateien stagen und unstagen
Wenn Sie u oder 2 (für update) an der Eingabeaufforderung What now> eingeben, werden Sie aufgefordert, welche Dateien Sie stagen möchten.
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>>
Um die Dateien TODO und index.html zu stagen, können Sie die Nummern eingeben.
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>>
Das * neben jeder Datei bedeutet, dass die Datei zum Staging ausgewählt ist. Wenn Sie nach der Eingabe von nichts an der Eingabeaufforderung Update>> Enter drücken, nimmt Git alles Ausgewählte und staget es für Sie.
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
Nun sehen Sie, dass die Dateien TODO und index.html gestaged sind und die Datei simplegit.rb immer noch nicht gestaged ist. Wenn Sie die Datei TODO an diesem Punkt unstagen möchten, verwenden Sie die Option r oder 3 (für revert).
*** 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
Wenn Sie sich Ihren Git-Status erneut ansehen, sehen Sie, dass Sie die Datei TODO unstaged haben.
*** 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
Um den Diff dessen anzuzeigen, was Sie gestaged haben, können Sie den Befehl d oder 6 (für diff) verwenden. Er zeigt Ihnen eine Liste Ihrer gestageten Dateien, und Sie können diejenigen auswählen, für die Sie den gestagten Diff sehen möchten. Dies ist sehr ähnlich wie die Angabe von git diff --cached in der Befehlszeile.
*** 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">
Mit diesen grundlegenden Befehlen können Sie den interaktiven Add-Modus nutzen, um Ihren Staging-Bereich etwas einfacher zu verwalten.
Patches stagen
Es ist auch möglich, dass Git bestimmte Teile von Dateien staget und den Rest nicht. Wenn Sie beispielsweise zwei Änderungen an Ihrer Datei simplegit.rb vornehmen und eine davon stagen möchten, die andere aber nicht, ist dies in Git sehr einfach. Aus der gleichen interaktiven Eingabeaufforderung wie im vorherigen Abschnitt können Sie p oder 5 (für patch) eingeben. Git fragt Sie, welche Dateien Sie teilweise stagen möchten; dann zeigt es für jeden Abschnitt der ausgewählten Dateien Hunks des Dateidiffs an und fragt, ob Sie sie einzeln stagen möchten.
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,?]?
Sie haben an diesem Punkt viele Optionen. Die Eingabe von ? zeigt eine Liste der möglichen Aktionen.
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
Im Allgemeinen werden Sie y oder n eingeben, wenn Sie jeden Hunk stagen möchten, aber das Stagen aller Hunks in bestimmten Dateien oder das Überspringen einer Hunk-Entscheidung bis später kann ebenfalls hilfreich sein. Wenn Sie einen Teil der Datei stagen und einen anderen Teil nicht gestaged lassen, wird Ihre Statusausgabe wie folgt aussehen:
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
Der Status der Datei simplegit.rb ist interessant. Er zeigt Ihnen, dass einige Zeilen gestaged und einige nicht gestaged sind. Sie haben diese Datei teilweise gestaged. An diesem Punkt können Sie das interaktive Add-Skript beenden und git commit ausführen, um die teilweise gestageten Dateien zu committen.
Sie müssen sich nicht im interaktiven Add-Modus befinden, um das partielle Staging von Dateien durchzuführen – Sie können das gleiche Skript starten, indem Sie git add -p oder git add --patch in der Befehlszeile verwenden.
Darüber hinaus können Sie den Patch-Modus für das partielle Zurücksetzen von Dateien mit dem Befehl git reset --patch, für das Auschecken von Dateiteilen mit dem Befehl git checkout --patch und für das Stashing von Dateiteilen mit dem Befehl git stash save --patch verwenden. Wir werden im Detail auf jeden dieser Punkte eingehen, wenn wir fortgeschrittene Anwendungen dieser Befehle behandeln.