Frage

Ich habe einen Remote -Git -Server, hier ist das Szenario, das ich ausführen möchte:

  • Für jeden Fehler/jede Funktion erstelle ich einen anderen Git -Zweig

  • Ich verpflichte meinen Code in dieser Git-Filiale immer wieder mit unabhängigen Git-Nachrichten

  • Im Top -Repository müssen wir einen Bug für einen Fehler mit offizieller Git -Nachricht machen

Wie kann ich meine Filiale in die Remote-Filiale verschmelzen, damit sie nur einen Commit für alle meine Schecks erhalten (ich möchte dafür sogar eine Commit-Nachricht zur Verfügung stellen)?

War es hilfreich?

Lösung

Sagen Sie, Ihr Bug -Fix -Zweig wird aufgerufen bugfix und du willst es zusammenführen master:

git checkout master
git merge --squash bugfix
git commit

Dadurch werden alle Commits von der abgenommen bugfix Zweig, drücken Sie sie in 1 Commit und verschmelzen es mit Ihrem master Zweig.


Erläuterung:

git checkout master

Wechselt zu Ihrem master Zweig.

git merge --squash bugfix

Nimmt alle Commits aus dem bugfix Zweig und fusioniert es mit Ihrem aktuellen Zweig.

git commit

Schafft einen einzigen Commit aus den zusammengeführten Änderungen.

Weglassen -m Mit Parameter können Sie eine Entwurfs -Commit -Nachricht ändern, die jede Nachricht von Ihren zerquetschten Commits enthält, bevor Sie Ihr Commit abschließen.

Andere Tipps

Was das schließlich für mich aufgeräumt hat, war ein Kommentar Zeigt das:

git checkout main
git merge --squash feature

ist das Äquivalent zu tun:

git checkout feature
git diff main > feature.patch
git checkout main
patch -p1 < feature.patch
git add .

Wenn ich einen Feature -Zweig mit 105 (!!) Commits fusionieren möchte und sie alle in einen in eine zerquetschen lassen möchte, möchte ich nicht git rebase -i origin/master weil ich separat zusammenlösen muss, um Konflikte für zusammenzufassen jeder der Zwischenkommiten (oder zumindest diejenigen, die sich selbst nicht selbst herausfinden können). Verwendung git merge --squash Bringt mir das Ergebnis, das ich möchte, von einem einzigen Commit für das Zusammenführen einer gesamten Feature -Filiale. Und ich muss höchstens eine manuelle Konfliktlösung durchführen.

Sie möchten mit der Squash -Option zusammenarbeiten. Das ist, wenn Sie es jeweils eine Zweigstelle tun möchten.

git merge --squash feature1

Wenn Sie alle Zweige gleichzeitig mit Single -Commits verschmelzen möchten, rebase zuerst die einzelnen Funktionen interaktiv und kreischen Sie dann jede Feature, dann verschmelzen Octopus:

git checkout feature1
git rebase -i master

Squash in ein Commit und wiederholen Sie dann für die anderen Merkmale.

git checkout master
git merge feature1 feature2 feature3 ...

Diese letzte Zusammenführung ist eine "Oktopus -Verschmelzung", weil sie viele Zweige gleichzeitig verschmelzen.

Hoffe das hilft

Wenn Sie schon haben git merge bugfix an main, Sie können Ihren Zusammenführungsmondit in einem mit:

git reset --soft HEAD^1
git commit

Verschmelzen newFeature Zweig in master mit einem individuellen Commit:

git merge --squash newFeature && git commit -m 'Your custom commit message';

Wenn Sie stattdessen tun, tun Sie es

git merge --squash newFeature && git commit

Sie erhalten eine Commit -Nachricht, die alle enthält newFeature Branch -Commits, die Sie anpassen können.

Ich erkläre es hier gründlich: https://youtu.be/fqnaiacelt4

Ich weiß, dass es bei dieser Frage nicht speziell von Github geht, aber da Github so weit verbreitet ist und dies die Antwort ist, nach der ich gesucht habe, werde ich sie hier teilen.

GitHub kann je nach den für das Repository aktivierten Zusammenführungsoptionen Kürbisverschleppungen durchführen.

Wenn Kürbisverführungen aktiviert sind, sollte die Option "Kürbis und Merge" in der Dropdown -Art unter der Taste "Merge" angezeigt werden.

Screenshot of "Squash and merge" Github feature

Angenommen, Sie haben in Feature/Task1 mit mehreren Commits gearbeitet.

  1. Gehen Sie zu Ihrer Projektabteilung (Projekt/my_project)

    git checkout project/my_project
    
  2. Erstellen Sie einen neuen Zweig (Feature/Task1_bugfix)

    git checkout -b feature/task1_bugfix
    
  3. Marge mit dem --squash Möglichkeit

    git merge --squash feature/task1
    
  4. Erstellen Sie ein einzelnes Komitee

    git commit -am "add single comments"
    
  5. Schieben Sie Ihren Zweig

    git push --set-upstream origin feature/task1_bugfix
    

Für Git

Erstellen Sie eine neue Funktion

über Terminal/Shell:

git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>

Dadurch wird es nicht bestrebt, ermöglicht es Ihnen, es zuerst zu überprüfen.

Dann verpflichten Sie und beenden Sie die Funktionen aus diesem neuen Zweig und löschen/ignorieren Sie das alte (das, auf dem Sie dev).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top