516 Stimmen

Kombinieren mehrerer Übertragungen vor der Übertragung in Git

Ich habe eine Reihe von Commits in meinem lokalen Repository, die thematisch ähnlich sind. Ich möchte sie zu einem einzigen Commit zusammenfassen, bevor ich sie in ein entferntes Repository hochlade. Wie kann ich das tun? Ich denke rebase tut dies, aber ich kann mir keinen Reim auf die Unterlagen machen.

11voto

Benny Neugebauer Punkte 45468

Sie können Commits mit einer Interaktive Neuauflage . Es gibt ein sehr schönes YouTube-Video, das zeigt, wie man dies auf der Kommandozeile oder mit SmartGit :

Wenn Sie bereits SmartGit-Benutzer sind, können Sie alle Ihre ausgehenden Übertragungen auswählen (indem Sie die Strg-Taste gedrückt halten) und das Kontextmenü (Rechtsklick) öffnen, um Ihre Übertragungen zu zerdrücken.

Es ist sehr bequem:

enter image description here

Es gibt auch ein sehr schönes Tutorial von Atlassian die zeigt, wie es funktioniert:

8voto

Tomer Ben David Punkte 7227

Und meine Art der squashing mehrere push ist (vielleicht haben Sie viele Commits in Ihren eigenen Zweig gepusht und möchten nun eine Pull-Anfrage stellen, ohne sie mit vielen Commits zu überladen, die Sie bereits gepusht haben). Die Art und Weise, wie ich das mache (es gibt keine andere einfachere Option, soweit ich das beurteilen kann).

  1. Erstellen Sie einen neuen Zweig zum Zweck der squash (Zweig des ursprünglichen Zweigs, zu dem Sie die Anfrage ziehen möchten).
  2. Verschieben Sie den neu erstellten Zweig.
  3. Merge-Zweig mit bereits gepushten Commits zum neuen Zweig.
  4. Neue Verzweigung und Squash neu verankern.
  5. Neuen Zweig verschieben.
  6. Erstellen Sie eine neue Pull-Anfrage für den neuen Zweig, der jetzt einen einzigen Commit hat.

Ejemplo:

git checkout from_branch_you_wish_to_pull_request_to
git checkout -b new_branch_will_have_single_squashed_commit
git push -u new_branch_will_have_single_squashed_commit
git merge older_branch_with_all_those_multiple_commits
git rebase -i (here you squash)
git push origin new_branch_will_have_single_squashed_commit

Sie können jetzt die Anfrage in from_branch_you_wish_to_pull_request_to

3voto

Greg Hewgill Punkte 882617

Sie möchten wahrscheinlich Interaktives Rebasing die unter diesem Link ausführlich beschrieben wird.

Sie können weitere gute Ressourcen finden, wenn Sie nach "git rebase interactive" suchen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X