Wenn Sie nur nach einer einfachen Lösung suchen, um frühere Übertragungen zu korrigieren, lesen Sie die Frage! Dort wird alles erklärt. Aber da Elmarco nach einem eleganten Weg gefragt hat, hier ist er:
Seit Git 1.7.0 gibt es eine --autosquash
Option für rebase
die genau das tut, was Sie wollen. Es gibt auch die --fixup
y --squash
Optionen für commit
um die Dinge zu erleichtern. Mit etwas Aliasing können Sie das Ganze wahrscheinlich sogar in einem einzigen Befehl unterbringen.
Ich würde vorschlagen, auf die neueste Git-Version zu aktualisieren, um den größtmöglichen Nutzen zu erzielen:
git/Documentation/RelNotes $ grep -i -A1 autosquash\\\|fixup *
1.7.0.txt: * "git rebase -i" learned new action "fixup" that squashes the change
1.7.0.txt- but does not affect existing log message.
--
1.7.0.txt: * "git rebase -i" also learned --autosquash option that is useful
1.7.0.txt: together with the new "fixup" action.
1.7.0.txt-
--
1.7.3.txt: * "git rebase -i" peeks into rebase.autosquash configuration and acts as
1.7.3.txt: if you gave --autosquash from the command line.
1.7.3.txt-
--
1.7.4.txt: * "git commit" learned --fixup and --squash options to help later invocation
1.7.4.txt- of the interactive rebase.
--
1.7.4.txt: * "git rebase --autosquash" can use SHA-1 object names to name which
1.7.4.txt: commit to fix up (e.g. "fixup! e83c5163").
1.7.4.txt-
1 Stimmen
Warum diese seltsame Anforderung, dass fixA in A zusammengeführt werden muss?
12 Stimmen
Weil es von vornherein in A hätte stehen müssen.
4 Stimmen
Ich tue dasselbe; ich weiß nicht, warum die Leute das für seltsam halten. Wenn Sie versuchen, Commits in kleine, logisch gruppierte Teile zu organisieren, dann ist es natürlich, dass Sie mehrere unveröffentlichte Commits gleichzeitig vorbereiten. (Man weiß vielleicht nicht, ob man wirklich mit A fertig ist, bis man C fertig hat).
0 Stimmen
Ich mache auch immer dasselbe - und ich habe mich nach so etwas gesehnt (ich nenne es gerne
git fixup <rev>
) seit geraumer Zeit.0 Stimmen
Ähnlich: stackoverflow.com/questions/3103589/