Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Versionskontrolle mit Git und SVN

Rebasing und Stashing

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
GIT verfügt über verschiedene Funktionen, um Änderungen weiterer Benutzer zu übernehmen. Entsprechende Befehle wenden hierbei die Übergabehistorie in beliebiger Reihenfolge auf das Repository an oder sichern einen aktuellen Versionsstand ohne Übergabe.

Transkript

Die Kollaboration mit anderen ist nicht immer einfach. Für einige Sonderfälle bietet Git auch einige besondere Funktionalitäten. Genau diese zeige ich Ihnen in den nächsten Minuten. Mit dem Befehl git fetch und der Angabe des jeweiligen Remotes, ist es möglich, alle Remote Branches herunterzuladen. Das funktioniert allerdings nicht wie der bereits bekannte Befehl git pull. Denn git fetch lädt lediglich die Remote Branches herunter in eine lokale Repräsentation, vereinigt aber nicht lokale Branches mit Remote Branches. Dadurch ist es auch möglich, Änderungen zu sehen, ohne Änderungen direkt übernehmen zu müssen. In meinem Fall hat nun jemand Änderungen an meinem Repository am Branch vorgenommen Mit dem Befehl git fetch und dem Namen des Remotes lade ich nun diese Änderungen herunter. Nach der Angabe meines Passworts wurden nun diese Änderungen auf die lokale Repräsentation des Remote Branches übernommen. Mit Hilfe eines Merge Vorganges könnte ich nun von dem Remote Branch so wie er bei mir vorliegt, auf meinen Hauptbranch übertragen. Der gleiche Vorgang mit TortoiseGit funktioniert über das Menü und über den Befehl fetch. Unter Angabe des jeweiligen Remotes und der Bestätigung von OK kann man nun die jeweiligen Änderungen herunterladen und könnte nun, um das beispielhaft zu demonstrieren, über TortoiseGit Merge die Auswahl des jeweiligen Branches unter Remotes Remote und dort den Master Branch und Bestätigung von OK die jeweiligen Änderungen nun für den lokalen Master Branch übernehmen. Lassen Sie uns nun annehmen, dass remote einige Änderungen vorgenommen wurden, die mit den Änderungen, die lokal gemacht wurden nicht ganz übereinstimmen. Git ermöglicht es mir nun als Nutzer auszuwählen, welche der Änderungen ich wie und auf welche Art und Weise auf mein Repository anwenden möchte. Der dafür zugehörige Befehl ist der so genannte rebase. Der rebase gibt genau an, wie die so genannte Commit Historie in welcher Reihenfolge auf mein Repository beziehungsweise meinen Arbeitsstand angewendet wird. Durch die Angabe von -i spezifiziere ich die interaktive Eingabe. Lassen Sie uns nun diesen Vorgang mit Hilfe von TortoiseGit nachvollziehen. Über das Kontextmenü TortoiseGit, dem Aufruf von Rebase, kann nun über die Auswahl des lokalen Branches, auf den das Ganze angewendet wird, und die Auswahl des Remote Branches jeweils die Commits, in der Zwischenzeit hier stattgefunden haben, gegen die Commits hier ausgewertet werden. Nachdem der Vorgang passiert ist, ist das Ganze, was sich auf dem Upstream Branch abgespielt hat für den Master Branch übernommen und der letzte Commit der hier ausgeführt wurde, ist dann der aktuellste. An der Stelle kann man sich, wenn man hier mehrere Commits hätte, dafür entscheiden, welchen dieser Commits man gegenüber den Dingen, die auf dem Remote Branch liegen, übernehmen möchte. Dies geht über Skip. Ansonsten ist es auch möglich, mit Edit die Commit Nachricht zu verändern, und mit Pick auch zu bestimmen, dass dieser Comment übernommen werden soll. Auch die Reihenfolge des Aufspielens der Commits kann beeinflusst werden. Wenn man nun den Rebase startet, kann es sein, dass ein Konflikt auftritt. Weil beispielsweise Dateien sich auf dem Remote Branch verändert haben, die sich auch im lokalen Branch verändert haben. Mit dem Konflikt sieht man, dass auf dem Remote Dokument einige Zeilen mehr dabei sind wie neuer Text 3. Neuer Text 2 kann einfach hinzugefügt werden. Um diesen Konflikt nun zu beheben könnte man einerseits den eben gesehenen Editor verwenden, oder einfach sagen dass man die eine Datei oder die andere Datei verwenden möchte. Als nächstes bestätigt man und führt den Commit durch. Schaut man nun in das Log, so sieht man, dass die Commits des Remote Branches übernommen worden sind und da man sich in der letzten Version für die andere Version entschieden hat, bleiben auch dementsprechend diese Commits erhalten. Der gleiche Vorgang ist auf der Kommandozeile ein wenig komplizierter. Durch die Ausführung von git rebase -i dann der jeweilige Branch auf den das Ganze ausgeführt wird und der Ursprung führt zu dieser grafischen Übersicht, die hier textuell repräsentiert wird im Vergleich zu der vorherigen. Es ist nun möglich, mit den jeweiligen Kommandos zu bestimmen, welche der Commits man übernehmen möchte, welche man von der Commit Nachricht her verändern möchte, Wenn man das Ganze nun bestätigt, indem man den Editor wieder verlässt mit :q wird der Rebase ausgeführt und man sieht an der Stelle, das ein Problem aufgetreten ist. Das ist ähnlich der Situation von vorher, das man sich dementsprechend um die Problemstellung des Konflikts der Inhalte kümmern müsste. Eine weitere wichtige Funktionalität für das Nutzen eines Rebases oder andere Merge Vorgänge ist der Befehl git stash. Stellen Sie sich dafür beispielsweise vor, Sie haben Änderungen an den Dateien vorgenommen, haben aber noch keinen Commit durchgeführt. Sie möchten nun allerdings Änderungen von anderen Remote Repositories beispielsweise übernehmen. Um nun einen sauberen Arbeitsstand für die Übernahme zu haben, würden Sie Ihre Änderungen zunächst wegsichern mit Hilfe des Stash Befehls. und die anderen Änderungen übernehmen. Sobald Sie fertig sind, können Sie mit git stash ptop die Änderungen zurückführen In meinem Fall habe ich nun die Datei Beispieldokument verändert. Ein Blick in Revert zeigt an, dass die Datei aktuell sich im veränderten Zustand befindet. Um diese Änderungen kurzzeitig wegzuschreiben und wieder von einem sauberen Stand aus arbeiten zu können, könnte ich nun über den Befehl TortoiseGit, Stash Save einer bestimmten Nachricht die Änderungen wegschreiben. Über TortoiseGit kann nun mit Stash Pop die Änderung wieder übernommen haben, sollte ich andere Vorgänge wie einen Merge oder dergleichen durchgeführt haben. Mit Stash List sehe ich die Änderungen, die ich separat weggeschrieben habe. In der Konsole funktioniert das nun über den Befehl git stash Ich kann zusätzlich eventuell auch eine Nachricht angeben. In dem Fall wurde keine angegeben und der aktuelle Stand wurde weggeschrieben. Mit dem Befehl git stash list sehe ich nun die bestimmten Stashes, in dem Fall trägt der Stash keinen Namen. Mit git stash pop könnte ich nun die Arbeitsstandänderungen wieder übernehmen, Sollte es bei der Übernahme zu Konflikten kommen, könnte ich diese auch entsprechend lösen. Der gleiche Vorgang für TortoiseGit über Stash Pop und hier könnte ich mir ähnlich in dem Fenster die Änderungen, die vorgenommen wurden, anzeigen lassen. In diesem Video haben Sie nun die Möglichkeiten kennen gelernt, Remote Branches herunterzuladen, Rebases gegen die lokalen Branches durchzuführen und aktuelle Arbeitsstände wegzuschreiben.

Derzeit sind keine Feedbacks vorhanden...
 
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:18.09.2014

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!