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~5ein, 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
escund danni, um den Test zu bearbeiten. - Auf der linken Seite können Sie die
pickmit einem der folgenden Befehle überschreiben. Wenn Sie ein Commit in ein vorheriges komprimieren und die Commit-Nachricht verwerfen möchten, geben Siefanstelle derpickdes 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 -ferzwingen, 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 --skipund das Rebasing beenden, indem Siegit rebase --abortin 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.