645 Stimmen

Verschieben von übertragenen (aber nicht gepushten) Änderungen in einen neuen Zweig nach dem Ziehen

Ich habe einiges an Arbeit geleistet ("Ihr Zweig ist 'origin/master' um 37 Übertragungen voraus."), die eigentlich in einen eigenen Zweig und nicht in master . Diese Übertragungen existieren nur auf meinem lokalen Rechner und wurden nicht an origin aber die Situation ist insofern etwas kompliziert, als andere Entwickler darauf gedrängt haben, die origin/master und ich habe diese Änderungen zurückgezogen.

Wie verschiebe ich meine 37 lokalen Commits rückwirkend auf einen neuen Branch? Ausgehend von den Dokumenten scheint es, dass git rebase --onto my-new-branch master o ...origin/master sollte dies tun, aber beide geben mir nur die Fehlermeldung "fatal: Needed a single revision". man git-rebase sagt nichts darüber aus, ob eine Revision der rebase und seine Beispiele tun dies nicht, daher habe ich keine Ahnung, wie ich diesen Fehler beheben kann.

(Beachten Sie, dass es sich hierbei um no ein Duplikat von Verschieben vorhandener, nicht gebundener Arbeiten in einen neuen Zweig in Git o Wie führe ich meine lokalen nicht übertragenen Änderungen in einen anderen Git-Zweig ein? da sich diese Fragen auf nicht übertragene Änderungen im lokalen Arbeitsbaum beziehen, nicht auf Änderungen, die lokal übertragen wurden).

6voto

Tim Keating Punkte 5960

Worüber?

  1. Verzweigung vom aktuellen HEAD.
  2. Stellen Sie sicher, dass Sie auf Meister und nicht Ihre neue Niederlassung.
  3. git reset zurück zum letzten Commit, bevor Sie mit den Änderungen begonnen haben.
  4. git pull um nur die Fernbedienungsänderungen, die Sie beim Zurücksetzen weggeworfen haben, wieder einzuziehen.

Oder explodiert das, wenn Sie versuchen, den Zweig wieder zusammenzufügen?

5voto

A Kok Punkte 35

Hier ist eine viel einfachere Methode:

  1. Einen neuen Zweig erstellen

  2. Führen Sie in Ihrem neuen Zweig eine git merge master - Dadurch werden die von Ihnen vorgenommenen (nicht gepushten) Änderungen in Ihrem neuen Zweig zusammengeführt

  3. Löschen Sie Ihren lokalen Master-Zweig git branch -D master Verwenden Sie -D 代わりに -d weil Sie die Löschung des Zweigs erzwingen wollen.

  4. Machen Sie einfach eine git fetch auf Ihrem Master-Zweig und führen Sie eine git pull auf Ihrem Master-Zweig, um sicherzustellen, dass Sie den neuesten Code Ihres Teams haben.

3voto

user1429980 Punkte 6380

Eine einfachere Methode, die ich verwendet habe (unter der Annahme, dass Sie 4 Commits verschieben wollen):

git format-patch HEAD~4

(Suchen Sie in dem Verzeichnis, von dem aus Sie den letzten Befehl ausgeführt haben, nach den 4 .patch Dateien)

git reset HEAD~4 --hard

git checkout -b tmp/my-new-branch

Dann:

git apply /path/to/patch.patch

In der von Ihnen gewünschten Reihenfolge.

0voto

Sergii Kabashniuk Punkte 119
  1. Prüfen Sie frische Kopien Ihrer Quellen

    git clone ........

  2. Abzweigung von der gewünschten Position aus vornehmen

    git checkout {position} git checkout -b {branch-name}

  3. Fernes Repository hinzufügen

    git remote add shared ../{original sources location}.git

  4. Entfernte Quellen abrufen

    git fetch shared

  5. Gewünschte Filiale abhaken

    git checkout {branch-name}

  6. Quellen zusammenführen

    git merge shared/{original branch from shared repository}

0voto

Sebastian Punkte 1069

Für mich war das der beste Weg:

  1. Prüfung auf Änderungen und Zusammenführungskonflikte git fetch
  2. Einen neuen Zweig erstellen git branch my-changes und drücken Sie auf die Fernbedienung
  3. Upstream auf den neu erstellten Zweig wechseln git master -u upstream-branch remotes/origin/my-changes
  4. Verschieben Sie Ihre Commits in den neuen Upstream-Zweig.
  5. Zurück zum vorherigen Upstream wechseln git branch master --set-upstream-to remotes/origin/master

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