Interaktiver Rebase
Ziel
- In diesem Projekt lernen Sie den Umgang und die Möglichkeiten des interaktiven Rebase.
 
Hilfsmittel
- Versuchen Sie zuerst, die unten stehenden Aufgaben mit Hilfe der Folien und des Cheatsheets zu lösen
 - Sollten Sie dabei Probleme haben, finden Sie bei jeder Aufgabe einen ausklappbaren Block, in dem der Lösungsweg beschrieben wird.
 
Vorbereitung
Suchen Sie im Gitlab das Projekt interactive-rebase und klonen Sie es:
- 
Suchen Sie im Gitlab links oben unter
Menu->Projectsnach dem Projektinteractive-rebase. Wenn Sie das Projekt hier nicht direkt sehen, finden Sie es unterYour projects. - 
Kopieren Sie den Link unter
Clone with HTTPS. - 
Gehen Sie zurück ins Terminal in der VSCode Instanz.
 - 
Stellen Sie sicher, dass Sie sich in
/root/workspacebefinden. Verlassen Sie etwaige vorherige Repositories mitcd ..(alternativ können Sie mitcd /root/workspacedirekt in das Verzeichnis wechseln). - 
Klonen Sie das Projekt mit
git clone {URL}. 
Aufgabe 1
Ein Entwickler hat auf dem Branch feature-1 ein einfaches Hello-World Python-Script
geschrieben. Die Aufgabe ist es, diesen Feature-Branch in den main-Branch zu integrieren.
Deshalb soll der Feature-Branch zunächst aufgeräumt werden. Dafür sollen alle Commits
in einen einzelnen 'gesquashed' werden.
- 
Wechseln Sie auf den Branch
feature-1. - 
Schauen Sie sich die Historie an, um zu sehen, was getan wurde.
 - 
Nutzen Sie den interaktiven Rebase, sodass nur noch ein Commit mit genau einer sinnvollen Commit-Nachricht übrig bleibt.
 - 
Überprüfen Sie die Historie, um zu sehen, ob alles so ist, wie Sie es erwarten.
 - 
Mergen Sie
feature-1in denmain-Branch ohne fast-forward. 
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Teil:
- Wechseln Sie in den 
interactive-rebaseOrdner. - Führen Sie zum Wechseln des Branches 
git switch feature-1aus, um in den bestehenden Branch zu wechseln. 
 - Wechseln Sie in den 
 - Teil:
- Schauen Sie sich den Dateibrowser an. Es gibt dort eine Datei 
hello-world.py. - Schauen Sie sich die Historie mit 
git log --graphan. - Schauen Sie sich einzelne Commits mit 
git show HEADbzwgit show HEAD~1undgit show HEAD~2an. 
 - Schauen Sie sich den Dateibrowser an. Es gibt dort eine Datei 
 - Teil:
- Das Feature enthält insgesamt 3 Commits, die wir nun in einen Einzigen vereinen möchten.
 Führen Sie deshalb 
git rebase -i HEAD~3aus. - Es erscheint eine Liste mit den Commits. Da wir nur noch einen Commit erhalten möchten, ändern wir die Liste zu:
     So werden die letzten beiden Commits in den Ersten integriert.
pick cf3b080 Add file where the feature should be implemented squash b88e281 Adds hello-world functionality squash 1d6f112 Fit typo in hello-world output - Sie erhalten nun eine Liste mit den kombinierten Commit-Nachrichten. Löschen Sie alle nicht auskommentierten Zeilen und geben Sie eine sinnvolle Nachricht ein.
 - Speichern und schließen Sie die Commit-Nachricht.
 
 - Das Feature enthält insgesamt 3 Commits, die wir nun in einen Einzigen vereinen möchten.
 Führen Sie deshalb 
 - Teil:
- Überprüfen Sie die Historie um zu sehen, ob alles so ist, wie Sie es erwarten.
 Führen Sie dazu 
git log --graphaus. 
 - Überprüfen Sie die Historie um zu sehen, ob alles so ist, wie Sie es erwarten.
 Führen Sie dazu 
 - Teil:
- Führen Sie 
git switch mainund danngit merge feature-1aus. 
 - Führen Sie 
 
Aufgabe 2
- 
Nutzen Sie
git reflogum ihren interaktiven Rebase rückgängig zu machen. Suchen Sie dazu im Reflog die Zeilerebase -i (start). Hier wurde der Rebase gestartet. Die Zeile darunter ist die Referenz zum Zustand davor. - 
Führen Sie ein
git resetaus um wieder auf diesen Zustand zu gelangen. 
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Teil:
- Führen Sie 
git reflogaus. - Suchen Sie die Zeile mit dem Inhalt 
rebase -i (start). Hier wurde der Rebase gestartet. - Die Zeile darunter ist die Referenz zum Zustand davor. Merken Sie sich die angegebene Referenz (
HEAD@{??}). 
 - Führen Sie 
 - Teil:
- Führen Sie 
git reset --hard HEAD@{??}aus. Ersetzen Sie dabei??mit der Zahl aus dem Reflog. - Führen Sie 
git log --graphaus. Sie sind nun wieder auf dem Ausgangszustand. 
 - Führen Sie 
 
Aufgabe 3
Falls noch Zeit übrig ist können Sie den feature-2-Branch auschecken und
anschauen. Er enthält ein einfaches Kommandozeilentool.
- 
Wechseln Sie auf den Branch
feature-2. - 
Erstellen Sie einen neuen Branch, sodass Sie nach einem Rebase einfach auf diesen Stand zurück springen können.
 - 
Schauen Sie sich die Historie an.
 - 
Versuchen Sie unterschiedliche Varianten von
rebase -iaus.