Wenn ich den Code in local schreibe, begehe ich irgendwann den Code, der noch nicht sauber ist, oder mit hässlicher Nachricht als temporäre Revision.
Wenn ich jedoch möchte, dass mein Code mit den anderen verschmelzt, möchte ich nur den letzten Snapshot, den der andere sehen kann (versteckte Revisionen, die hässlich aussehen)
Bsp. Ich fork 0 zu meinem lokalen Repository, ich mache Änderungen und testen und Commit mit unsauberen Code
0- & gt; 1- & gt; 2- & gt; 3- & gt; 4- & gt; 5- & gt; 6 (Endcode)
Wenn die anderen den Code ziehen, ist es möglich, anderen nur den Endzustand zu zeigen? und nicht den Baum von 1..5 sehen
Ich möchte, dass Nutzer wie
sehen0 ------------------- & gt; 6
Eine Möglichkeit, die ich mir vorstellen kann, ist das Erstellen einer Patch-Datei, aber es reicht nicht aus, wenn eine Datei gelöscht oder erstellt werden muss.
Ich benutze Antwort von @ mark-longair und @ charles-baily um meine Arbeit zu erledigen
Sagen wir, ich habe eine Verzweigung ...
%Vor%erster Weg , Arbeitsverzeichnis ist Zweig 'Feature'
%Vor%Wir werden überhaupt keine vorherigen Commits sehen, müssen die neue Commit-Nachricht schreiben
zweiter Weg , Arbeitsverzeichnis ist Zweig 'Feature'
%Vor%vom Editor, wechseln Sie von zu squash (oder s ) für alle Commits außer dem ersten
%Vor%Fertig. Auf diese Weise wird eine vorherige Commit-Nachricht angezeigt, die wir als endgültiges Commit bearbeiten können.
Sie können reset --soft
verwenden, um mehrere Commits zu einem einzigen neuen Clean Commit zu zerquetschen. Mit Ihrer Verzweigung am endgültigen Code ohne stufenweise Änderungen können Sie tun:
Wenn git commit
auffordert, geben Sie eine eindeutige Commit-Meldung, in der die vollständigen Änderungen beschrieben werden.
Der flexibelste Weg, dies zu tun, ist eine interaktive Rebase, um Ihre Commits zusammenzufügen oder zu ändern. Sie müssen jedoch aufpassen, dass Sie keine Geschichte neu schreiben, die bereits öffentlich ist. Wenn Sie beispielsweise an der Verzweigung master
arbeiten und alle Ihre Commits, die nicht in origin/master
enthalten sind, neu schreiben und linearisieren (was normalerweise die Arbeit bedeutet, die Sie noch nicht verschoben haben), können Sie das tun :
Dadurch wird ein Texteditor gestartet, in dem jedes Commit, das Sie nicht im Ursprung / Master haben, vom ältesten zum neuesten angezeigt wird. Wenn Sie ein Commit mit dem vorherigen kombinieren möchten, können Sie einfach den Anfang der Zeile von pick
auf squash
ändern. Oder, wenn Sie dieses Commit irgendwie ändern möchten, können Sie pick
in edit
ändern.
Die Verwendung von interaktiver Rebase ist der flexibelste Weg, um das zu tun, wonach Sie fragen, und es ist ein sehr nützliches Werkzeug, um es kennenzulernen, aber in der genauen Situation, die Sie beschreiben, ist es wahrscheinlich übertrieben. Überprüfen Sie zunächst, ob die Ausgabe von git status
sauber ist, damit Sie sicher sind, dass Ihr Staging-Bereich den gleichen Status wie HEAD
aufweist. Sie können dann einen "Soft-Reset" zurück zu 0
durchführen, der HEAD
auf diesen Commit zurücksetzt, aber Ihren Arbeitsbaum und Index (d. H. Den Staging-Bereich) intakt lässt. Wenn Sie dann einen Commit durchführen, wird Ihr Index verwendet, um einen neuen Commit mit demselben Status wie 6
, aber mit 0
als Eltern zu erstellen. d. h.
Vorausgesetzt, Sie haben Ihre Commits nicht bereits an die Fernbedienung gesendet, dann gibt es mehrere Möglichkeiten, dies zu tun.
Eine Option ist die Verwendung von
%Vor%gibt Ihnen den interaktiven Rebase-Editor. Sie können dann alle Commits mit Ausnahme der letzten als 'Squash'
markierenTags und Links git