it-swarm.com.de

Wie vermeide ich die Hölle des Merge-Commits auf GitHub / BitBucket?

Wir haben in unserem Repo eine Menge solcher Verpflichtungen:

Merge branch 'master' of bitbucket.org:user/repo

Dies geschieht jedes Mal, wenn ein Entwickler seinen lokalen Zweig mit dem Repo der obersten Ebene synchronisiert.

Gibt es eine Möglichkeit zu vermeiden, dass diese Merge-Commit-Hölle das gesamte Repo-Protokoll überfüllt? Kann man sie vermeiden, wenn man die Pull-Requests auf irgendeine Weise initiiert?

Ich weiß, dass ich Git Rebase ausführen kann, wenn dies nur in meiner lokalen VM) erfolgt. Gibt es eine Entsprechung in der GitHub/BitBucket-Benutzeroberfläche?

Wie macht ihr das?

82
Niklas9

Feature-Zweige vor dem Zusammenführen neu starten

Wenn Sie Merge-Commits vermeiden möchten, müssen Sie sicherstellen, dass alle Commits schnell vorwärts ausgeführt werden. Sie tun dies, indem Sie sicherstellen, dass Ihr Feature-Zweig ordnungsgemäß auf Ihre Entwicklungslinie zurückgesetzt wird, bevor eine Zusammenführung wie folgt durchgeführt wird:

git checkout master
git checkout -b feature/foo

# make some commits

git rebase master
git checkout master
git merge --ff-only feature/foo

Rebase hat auch viele Flags, einschließlich interaktives Rebasing mit dem -i flag, aber das ist möglicherweise nicht erforderlich, wenn Sie die Dinge so einfach wie möglich halten und den gesamten Zweigverlauf bei einer Zusammenführung beibehalten möchten.

Verwenden Sie die --ff-only Flagge

Abgesehen von der Umbasierung, die Verwendung der --ff-only Flag stellt sicher, dass nur Schnellvorlauf-Commits zulässig sind. Ein Commit wird nicht ausgeführt, wenn es sich stattdessen um ein Merge-Commit handelt. Die Handbuchseite von git-merge (1) lautet:

--ff-only

Verweigern Sie das Zusammenführen und beenden Sie das Programm mit einem Status ungleich Null, es sei denn, das aktuelle HEAD ist bereits aktuell oder die Zusammenführung kann als schneller Vorlauf aufgelöst werden.

117
Todd A. Jacobs

"Todd A. Jacobs", bereits erwähnt als "Rebase", ist hier das Konzept. Dies ist nur eine detailliertere Vorgehensweise.

Angenommen, Sie befinden sich in der Hauptniederlassung

$ git branch
  * master

Wenn Sie eine Korrektur vornehmen möchten, erstellen Sie eine "Fixbranch", die vom Master abgezweigt wird

$ git checkout -b fixbranch

Vielleicht hättest du ein paar Tage in diesem Zweig gearbeitet und ein paar Verpflichtungen gehabt.

Der Tag, an dem Sie Ihre Commits an das zentrale Master-Repo senden wollten! Kasse Master und erhalten Sie die neuesten Änderungen aus dem zentralen Master-Repo

$ git checkout master
$ git pull Origin master

Starten Sie Ihre Fixbranch mit dem Master neu, um eine saubere Historie zu haben und die Konflikte, falls vorhanden, im lokalen Repository selbst zu lösen.

$ git checkout fixbranch
$ git rebase master

Jetzt ist fixbranch auf dem neuesten Stand mit dem zentralen Master, lassen Sie mich fixbranch in den Master-Zweig einbinden

 $ git checkout master
 $ git merge fixbranch

Ich bin fertig! Lassen Sie mich den lokalen Master an den zentralen Master weiterleiten

$ git Push Origin master

https://git-scm.com/book/en/v2/Git-Branching-Rebasing

2
Kondal Kolipaka