ist es in Ordnung, immer git pull –rebase master branch zu verwenden

Lesezeit: 4 Minuten

Wir sind ein Team, das mit Git arbeitet, wir haben ein zentrales Repository (einzelner Ursprung), das wir verwenden push und pull from (und capistrano verwendet es, um den Branch-Master bereitzustellen)

Wir machen regelmäßig Commits und Deployments (10 bis 20 Deployments pro Tag), das heißt, wir haben viele Merge-Commits und git blame zum Albtraum werden

Ich habe das gelesen, um eine einfachere Geschichte zu haben, die wir verwenden können git pull --rebase um es zu umgehen. Ist es eine gute Idee, dies immer auf dem Master-Zweig zu tun?

Wenn ja, würde ich vorschlagen, es in der Konfiguration festzulegen mit:

git config branch.master.rebase true

Gibt es ein Problem damit?

Überhaupt kein Problem. Das wird sogar bevorzugt.

In 99 % der Fälle ist es besser, die Änderungen zu rebasen. Wenn nicht, kann der Entwickler die Rebase jederzeit abbrechen und seine Änderungen manuell zusammenführen.

Die Alternative (Merging on Pull) verursacht haufenweise kleine Side-Commits und Merges, die keinen Sinn ergeben.

Im Allgemeinen sehe ich nicht oft den Sinn, lokale Änderungen zusammenzuführen. Es impliziert, dass es etwas Besonderes an der genauen Revision gab, mit der der Entwickler begonnen hat, und irgendwie würde ein Rebasing auf eine andere Revision zu einem Informationsverlust führen (vielleicht „Ich habe damit vor Bobs Feature begonnen und ich möchte das mitteilen, falls dies nicht der Fall ist spiele gut mit Bob und ich werde beschuldigt” oder so…). Dies ist tatsächlich selten der Fall und eine saubere, geradlinige Commit-Historie ist viel einfacher zu verfolgen.

Pull-Rebase standardmäßig zu machen ist in Ordnung (nicht unbedingt eine “gute Idee”, auch nicht unbedingt eine “schlechte Idee”). Sie müssen nur bedenken, dass dies Ihre Arbeit tatsächlich rebasiert. Wenn Sie eine Reihe von Commits gemacht haben, die alle davon abhängen, was im Repo war Vor Bob hat es geändert1kann Ihr Rebase (zusätzlich zu Bobs Änderungen) Sie dazu zwingen, all diese Commits zu korrigieren, obwohl es einfacher gewesen wäre, nur den endgültigen Merge-Commit zu korrigieren.

Ich mache das lieber manuell: run git fetchund dann git rebase oder git merge je nach Situation, die ich feststellen kann, sobald ich das Holen durchgeführt habe.

Es gibt einen Vorteil git pull --rebase (und/oder Einstellung branch.master.rebase true), da ein “Pull mit Rebase” besonders intelligent ist und einige Fälle handhaben kann, in denen die Fernbedienung auch Rebases durchgeführt hat.


1“Bob” steht hier für jeden, der eine Änderung vorgenommen hat (und Sie geschlagen hat push Schritt), der dazu führt, dass Ihre eigenen Änderungen sozusagen “Verdauungsstörungen haben”.

Pull.rebase ist meiner Erfahrung nach immer in Ordnung. Wenn Sie keine Zusammenführungskonflikte haben möchten, können Sie in einem lokalen Zweig arbeiten, und wenn Sie mit dem neuesten Code arbeiten möchten, ziehen Sie es immer vor, alle nicht festgeschriebenen Änderungen zu haben, bevor Ihre aktuelle Arbeit gepusht wird.

Zusammenführung in einer Filiale als Folge git pull ist fast immer bedeutungslos, wenn Merge sinnvoll wäre, hätten Zweige anders sein sollen (und Merge explizit).

Siehe auch http://stevenharman.net/git-pull-with-automatic-rebase.

  • Da wir nur aus dem zentralen Repository ziehen/drücken, kann niemand daraus ziehen mein master branch, sodass ich keine in anderen Repositories vorhandene Arbeit rebasen kann git pull --rebase master. kann ich? Natürlich werden Feature Branches nur rebasiert, wenn sie nicht veröffentlicht werden. Ich rede hier nur vom Meister

    – Matthias

    4. Oktober 2013 um 7:27 Uhr


  • @Mathieu: Niemand kann Ihren Master ziehen, aber wenn Sie Ihren Master in einen Entwicklungszweig im zentralen Repository verschieben, kann ihn jemand anderes verwenden, und Sie sollten ihn dann nicht rebasen.

    – Jan Hudec

    4. Oktober 2013 um 7:36 Uhr

  • Diese Antwort ist falsch, es sei denn, Sie verschieben den Master mit -f und/oder verschieben ihn in verschiedene Upstream-Repositories, die niemals mit dem Master-Repo synchronisiert werden. Wenn Sie dies nicht tun, ist der umgeschriebene Verlauf per Definition auf nicht freigegebene lokale Commits beschränkt.

    – Chris Adams

    1. April 2015 um 22:15 Uhr

  • @ChrisAdams: Wie macht das diese Antwort falsch, obwohl? Wenn Sie nicht mitdrücken -f (muss nicht sein Meister speziell; Sie können einen Feature-Zweig mit pushen -f während jemand anderes es möglicherweise zusammenführen muss), werden Sie nicht auf den problematischen Fall stoßen. Das macht den Fall nicht unproblematisch.

    – Jan Hudec

    2. April 2015 um 4:42 Uhr

  • Der erste Satz: „Sie sollten niemals eine Revision rebasieren, die in einem anderen Repository existiert und auf der möglicherweise eine andere Arbeit basiert, da diese Arbeit dann ebenfalls rebasiert werden müsste“. Wenn Sie immer nur die Commits rebasen, die noch nicht geteilt wurden (d. h. was git pull --rebase master tatsächlich tut), dann spricht dieser Satz von einer Situation, die nicht existiert.

    – Chris Adams

    2. April 2015 um 13:36 Uhr

1140940cookie-checkist es in Ordnung, immer git pull –rebase master branch zu verwenden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy