Ich habe acht Commits in einem Zweig, die ich per E-Mail an einige Leute senden möchte, die noch nicht aufgeklärt sind. Bisher gibt mir alles, was ich mache, entweder 8 Patch-Dateien oder seit Beginn der Zeit Patch-Dateien für jedes Commit in der Geschichte des Zweigs. Ich habe git rebase --interactive verwendet, um die Commits zu quetschen, aber jetzt gibt mir alles, was ich versuche, von Anfang an zig Millionen Patches. Was mache ich falsch?
git format-patch master HEAD # yields zillions of patches, even though there's
# only one commit since master
git
patch
squash
git-squash
Skiphoppy
quelle
quelle
Antworten:
Ich würde empfehlen, dies auf einem Wegwerfzweig wie folgt zu tun. Wenn sich Ihre Commits im Zweig "Newlines" befinden und Sie bereits zu Ihrem Zweig "Master" zurückgekehrt sind, sollte dies den Trick tun:
Hoffe das hilft!
quelle
git comit -m "My squashed commits"
sonst würde es andere nicht verfolgte Dateien hinzufügengit checkout 775ec2a && git checkout -b patch && git merge --squash branchname
Nur um dem Topf noch eine Lösung hinzuzufügen: Wenn Sie diese stattdessen verwenden:
Dann sind es immer noch 8 Patches ... aber alle befinden sich in einer einzigen Patchdatei und gelten als eine mit:
quelle
git rebase -i ...
sie alle stillen und zu einem zerquetschen.Ich benutze immer Git Diff, also in deinem Beispiel so etwas wie
quelle
git log
Dies ist eine Anpassung der Antwort von Adam Alexander, falls sich Ihre Änderungen im Hauptzweig befinden. Dies tun die folgenden:
quelle
Wie Sie bereits wissen, erhalten
git format-patch -8 HEAD
Sie mit a acht Patches.Wenn Sie möchten, dass Ihre 8 Commits als eins angezeigt werden und es Ihnen nichts ausmacht, den Verlauf Ihres Zweigs (
o-o-X-A-B-C-D-E-F-G-H
) neu zu schreiben , können Sie:oder, und es wäre eine bessere Lösung, alle 8 Commits von
X
(das Commit vor Ihren 8 Commits) in einem neuen Zweig wiederzugebenAuf diese Weise haben Sie nur ein Commit im Zweig "Zustellung" und es repräsentiert alle Ihre letzten 8 Commits
quelle
git merge master
macht nur einen schnellen Vorlauf und quetscht keine Commits in einen. Wechseln Sie zugit merge --squash master
, um alle Commits zu quetschen und im bereitgestellten Bereich sichtbar zu machen. Ihr Flow wird mit dieser Änderung funktionieren. (Ich benutze Git Version 2.1.0.)Format-Patch zwischen zwei Tags:
quelle
Am einfachsten ist es
git diff
,git log
die kombinierte Festschreibungsnachricht zu verwenden und hinzuzufügen , die die Squash-Methode ausgeben würde. So erstellen Sie beispielsweise den Patch zwischen Commitabcd
und1234
:Dann beim Anwenden des Patches:
Vergessen Sie nicht das
--binary
Argument,git diff
wenn Sie mit Nicht-Textdateien, z. B. Bildern oder Videos, arbeiten.quelle
Basierend auf Adam Alexanders Antwort:
quelle