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?
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.
--ff-only
FlaggeAbgesehen 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.
"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