Git Teil 2
Branches#
Branches sind sowas wie Computerspielstände. In meinem
Arbeitsverzeichniss kann ich wild zwischen den verschiedenen
Branches hin und herwechseln, solange ich vor dem Wechseln commite:
1
2
3
4
5
6
7
8
9
10
11
|
git status
Auf Branch master
nichts zu committen, Arbeitsverzeichnis unverändert
~/Dokumente/gtest/ $> cat meinedatei.txt
master stand
~/Dokumente/gtest/ $> git branch
chef
~/Dokumente/gtest/ $> git checkout chef
Zu Branch 'chef' gewechselt
~/Dokumente/gtest/ $> cat meinedatei.txt
bla aenderung
|
Wenn ich eine Datei geändert habe und zu einem anderen Branch wechseln
will, lässt git das ohne ein commit oder force nicht zu:
1
2
3
4
5
6
7
8
|
git checkout master
error: Ihre lokalen Änderungen in den folgenden Dateien würden beim Auschecken
überschrieben werden:
meinedatei.txt
Bitte committen oder stashen Sie Ihre Änderungen, bevor Sie Branches
wechseln.
Abbruch
~/Dokumente/gtest/ $>
|
Ein Branch als Spielwiese#
Sinnvoll ist einen Branch als Spielwiese zu haben, dort einfach und
schnell und häufig zu commiten. Diese Änderungen merged man dann in den
Hauptzweig und commitet einmal sauber.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# Branch Spielwiese anlegen und dort hineinwechseln:
~/Dokumente/gtest/ $> git checkout -b spielwiese
Zu neuem Branch 'spielwiese' gewechselt
# 3 änderungen jeweils einzeln commiten:
~/Dokumente/gtest/ $> echo bla >> meinedatei.txt ; git commit -a -m 'c1'
[spielwiese 161c062] c1
1 file changed, 5 insertions(+)
~/Dokumente/gtest/ $> echo bla >> meinedatei.txt ; git commit -a -m 'c2'
[spielwiese 5c0885e] c2
1 file changed, 1 insertion(+)
~/Dokumente/gtest/ $> echo bla >> meinedatei.txt ; git commit -a -m 'c3'
[spielwiese 43d7f62] c3
1 file changed, 1 insertion(+)
# jetzt die letzten 3 Commits rebasen:
~/Dokumente/gtest/ $> git rebase -i 'HEAD~3'
[losgelöster HEAD 9c5630c] Merge branch 'spielwiese'
Date: Tue Sep 12 18:21:15 2017 +0200
Successfully rebased and updated refs/heads/spielwiese.
~/Dokumente/gtest/ $>
|
Dabei geht ein Editor mit Erklärungen auf, wir squashen das ganze:
1
2
3
|
squash 161c062 c1
squash 5c0885e c2
quash 43d7f62 c3 # Rebase von ad519e1..43d7f62 auf ad519e1 (3 Kommandos)
|
Jetzt habe ich nur noch eine Logmeldung und kann mit
1
2
|
git checkout master
git merge spielwiese
|
den Spielwiese Branch mergen und mit
1
|
git branch -d spielwiese
|
den nicht mehr gebrauchten Branch löschen.