Frage

flubbed ich meine Geschichte und will es einige Änderungen zu tun. Das Problem ist, ich habe ein mit zwei unabhängigen Änderungen verpflichten, und diese begehen, indem er einige andere Änderungen in meinem lokalen (nicht gedrückt) Geschichte umgeben ist.

Ich möchte diese verpflichten aufzuspalten, bevor ich es schieben, aber die meisten der Führer habe ich sehe mit Splitting zu tun, bis Ihre letzte begehen oder nicht gebundenen lokale Änderungen. Ist es möglich, dies zu einem tun verpflichten, dass ein wenig in der Geschichte begraben, ohne dass „re-do“ meine Commits seitdem?

War es hilfreich?

Lösung

Es ist eine Anleitung zur Spaltung Commits in dem Fütterungsmaterial manpage . Die kurze Zusammenfassung ist:

  • Führen Sie ein interaktives Fütterungsmaterial einschließlich dem Ziels begeht (z git rebase -i <commit-to-split>^ branch) und markieren Sie ihn bearbeitet werden.

  • Wenn das Fütterungsmaterial erreicht, die zu begehen, verwendet git reset HEAD^ zurücksetzen, bevor der Commit, aber halten Sie Ihre Arbeit Baum intakt.

  • Inkrementelle Änderungen hinzufügen und sie begehen, wie viele Commits machen, wie gewünscht. add -p kann nützlich sein, nur einige der Änderungen in einer Datei hinzuzufügen. Verwenden Sie commit -c ORIG_HEAD , wenn Sie wieder die Original wollen Commit-Nachricht für einen bestimmten begehen.

  • Wenn Sie testen möchten, was Sie zu begehen (gute Idee!) Verwendung git stash, um den Teil verstecken Sie nicht (oder stash --keep-index bevor Sie begehen sie selbst) begangen, zu testen, dann git stash pop die zurück Ruhe für die Arbeit Baum. Halten Sie machen verpflichtet, bis Sie alle Änderungen erhalten verpflichtet, das heißt eine saubere Arbeit Baum.

  • Ausführen git rebase --continue fortzufahren Commits Anwendung nach dem jetzt-split begehen.

Andere Tipps

Hier ist, wie es zu tun mit Magit .

Say verpflichten ed417ae ist, die Sie ändern möchten; es enthält zwei unabhängige Änderungen und wird unter einem oder mehreren Commits begraben. Hit ll das Protokoll, und navigieren Sie zu ed417ae zeigen:

drücken Sie dann r die rebase Popup zu öffnen

und m zu modifizieren, die an einem Punkt zu begehen.

Beachten Sie, wie die @ gibt es jetzt auf dem Commit möchten Sie Split - das bedeutet HEAD ist jetzt an diesem begehen:

Wir wollen HEAD an die Eltern bewegen, so navigate an die Mutter (47e18b3) und Hit x (magit-reset-quickly, zu o gebunden, wenn Sie verwenden evil-magit) und geben zu sagen: „Ja ich am Punkt begehen gemeint“. Ihr Protokoll sollte nun wie folgt aussehen:

Nun, um Hit q zum regulären Magit Status zu gehen, verwenden Sie dann den regulären unstage u Befehl unstage was geht nicht in der ersten begehen, begehen c den Rest wie üblich, dann stage und commit, was in der zweiten geht begehen, und wenn Sie fertig sind: Hit r die rebase Popup zu öffnen

und andere r fortzusetzen, und Sie sind fertig! ll jetzt zeigt:

So teilen Sie eine <commit> begehen und fügen Sie die neue begehen vor diesem , und speichern Sie den Autor Datum <commit>, - die Schritte sind folgende:

  1. Bearbeiten Sie die commit vor <commit>

    git rebase -i <commit>^^
    

    . NB: vielleicht wird es auch als gut zu bearbeiten <commit> erforderlich

  2. Cherry <commit> in den Index auswählen

    git cherry-pick -n <commit>
    
  3. interaktiv zurückgesetzt unnötige Änderungen aus dem Index und setzen Sie den Arbeits Baum

    git reset -p && git checkout-index -f -a
    

    Als Alternative bunkern nur unnötige Änderungen interaktiv: git stash push -p -m "tmp other changes"

  4. Nehmen Sie weitere Änderungen (falls vorhanden), und erstellen Sie die neue begehen

    git commit -m "upd something" .
    

    Optional, wiederholen Sie die Artikel 2-4 weitere Zwischen Commits hinzuzufügen.

  5. Weiter Rebasing

    git rebase --continue
    

Wenn Sie noch nicht gedrückt haben, nur git rebase verwenden. Noch besser ist, Gebrauch git rebase -i zu bewegen verpflichtet um interaktiv. Sie können an der Vorderseite der säumige begehen bewegen, ist es dann, wie Sie sich trennen, wie und die Patches bewegen zurück (falls erforderlich).

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