Willkommen in unserem ultimativen Leitfaden für die Befehle git merge
und git rebase
. In diesem Tutorial erfahren Sie alles, was Sie über die Kombination mehrerer Zweige mit Git wissen müssen.
Git Merge
Der Befehl git merge
führt alle Änderungen, die an der Codebasis in einem separaten Zweig vorgenommen wurden, als neues Commit zu Ihrem aktuellen Zweig zusammen.,
Die Befehlssyntax lautet wie folgt:
git merge BRANCH-NAME
Wenn Sie z. B. in einem Zweig mit dem Namen dev
arbeiten und alle neuen Änderungen zusammenführen möchten, die in einem Zweig mit dem Namen new-features
vorgenommen wurden, geben Sie den folgenden Befehl aus:
git merge new-features
div>
Hinweis: Wenn in Ihrem aktuellen Zweig nicht festgeschriebene Änderungen vorhanden sind, können Sie mit Git erst zusammengeführt werden, wenn alle Änderungen in Ihrem aktuellen Zweig festgeschrieben wurden., Um mit diesen Änderungen umzugehen, können Sie entweder:
Erstellen Sie einen neuen Zweig und übernehmen Sie die Änderungen
git checkout -b new-branch-namegit add .git commit -m "<your commit message>"
Verstauen Sie sie
git stash # add them to the stashgit merge new-features # do your mergegit stash pop # get the changes back into your working tree
Alle Änderungen aufgeben
git reset --hard # removes all pending changes
Git Rebase
Rebasing a branch in Git is a weg, um die Gesamtheit eines Zweiges zu einem anderen Punkt im Baum zu bewegen. Das einfachste Beispiel ist das Verschieben eines Zweiges weiter oben im Baum., Angenommen, wir haben einen Zweig, der am Punkt A vom Masterzweig abweicht:
/o-----o---o--o-----o--------- branch--o-o--A--o---o---o---o----o--o-o-o--- master
Wenn Sie den Rebase so verschieben können:
/o-----o---o--o-----o------ branch--o-o--A--o---o---o---o----o--o-o-o master
Stellen Sie sicher, dass Sie alle Commits im Rebase in Ihrem Masterzweig haben. Überprüfen Sie den Zweig, den Sie rebase möchten, und geben Sie git rebase master
(wobei master der Zweig ist, auf dem Sie rebase möchten)., dass zum Beispiel ein Zweig, der auf einem anderen Zweig basierte (nennen wir es feature), auf master rebased wird:
/---o-o branch /---o-o-o-o---o--o------ feature----o--o-o-A----o---o--o-o-o--o--o- master
Nach git rebase master branch
oder git rebase master
Wenn Sie den Zweig ausgecheckt haben, erhalten Sie:
/---o-o-o-o---o--o------ feature----o--o-o-A----o---o--o-o-o--o--o- master \---o-o branch
Git rebase.in der Konsole
Um git rebase
in der Konsole mit einer Liste von Commits zu verwenden, können Sie die Rebase auswählen, bearbeiten oder löschen:
- Geben Sie
git rebase -i HEAD~5
ein, wobei die letzte Nummer eine beliebige Anzahl von Commits aus den letzten Commits ist, die Sie überprüfen möchten., - Drücken Sie in vim
esc
und danni
, um den Test zu bearbeiten. - Auf der linken Seite können Sie die
pick
mit einem der folgenden Befehle überschreiben. Wenn Sie ein Commit in ein vorheriges komprimieren und die Commit-Nachricht verwerfen möchten, geben Sief
anstelle derpick
des Commits ein. - Speichern und beenden Sie Ihren Texteditor.
- Wenn rebase gestoppt wird, nehmen Sie die erforderlichen Anpassungen vor und verwenden Sie dann
git rebase --continue
, bis die Rebase erfolgreich ist., - Wenn es erfolgreich neu gestartet wird, müssen Sie Ihre Änderungen mit
git push -f
erzwingen, um die neu erstellte Version zu Ihrem Remote-Repository hinzuzufügen. - Wenn es einen Zusammenführungskonflikt gibt, gibt es eine Reihe von Möglichkeiten, dies zu beheben, einschließlich der Befolgung der Vorschläge in diesem Handbuch. Eine Möglichkeit besteht darin, die Dateien in einem Texteditor zu öffnen und die gewünschten Teile des Codes zu löschen. Verwenden Sie dann gefolgt von
git rebase --continue
., Sie können das in Konflikt stehende Commit überspringen, indem Siegit rebase --skip
und das Rebasing beenden, indem Siegit rebase --abort
in Ihrer Konsole ausführen.
Zusammenführungskonflikte
Ein Zusammenführungskonflikt tritt auf, wenn Sie Commits für separate Zweige vornehmen, die dieselbe Zeile auf widersprüchliche Weise ändern.,welche Version der Datei in einer Fehlermeldung ähnlich der folgenden gespeichert werden soll:
CONFLICT (content): Merge conflict in resumé.txt Automatic merge failed; fix conflicts and then commit the result.
Wenn Sie sich die Datei in Ihrem Code-Editor ansehen, können Sie sehen, wo der Konflikt stattgefunden hat:
<<<<<<< HEADAddress: 808 South Street=======Address: 505 North Street>>>>>>> updated_address
Git hat der Datei einige zusätzliche Zeilen hinzugefügt:
<<<<<<< HEAD
=======
>>>>>>> updated_address
Git Merge vs Git Rebase
Sowohl git merge
als auch git rebase
sind sehr nützliche Befehle, und einer ist nicht besser als der andere., Es gibt jedoch einige sehr wichtige Unterschiede zwischen den beiden Befehlen, die Sie und Ihr Team berücksichtigen sollten.
Wenn git merge
ausgeführt wird, wird ein zusätzliches Merge-Commit erstellt. Wenn Sie in Ihrem lokalen Repository arbeiten, kann der Commit-Verlauf durch zu viele Merge-Commits verwirrend aussehen. Eine Möglichkeit, das Merge-Commit zu vermeiden, besteht darin, stattdessen git rebase
.
git rebase
ist ein sehr mächtiges feature. Davon abgesehen ist es auch riskant, wenn es nicht richtig verwendet wird., git rebase
ändert den Commit-Verlauf, verwenden Sie ihn also vorsichtig. Wenn das Rebasing im Remote-Repository durchgeführt wird, können viele Probleme auftreten, wenn andere Entwickler versuchen, die neuesten Codeänderungen aus dem Remote-Repository abzurufen. Denken Sie daran, nur laufen git rebase
in einem lokalen repository.
Das ist alles, was Sie wissen müssen, um mit den Besten von ihnen zu fusionieren und Rebase.