2017-07-16 5 views
0

Also hier ist das Problem im Moment.Zurücksetzen auf git commit mit Ausnahme von meinem letzten Commit

Also packte ich den Upstream-Zweig und machte einige Änderungen und ein Commit erstellt.

Ich habe einen Arbeitgeber, der mir jetzt sagt, dass ich eine PR zu seinem Zweig machen muss. Aber sein Zweig wird nicht auf den neuesten Commit aktualisiert, wie es bei mir ist.

Also, wenn ich eine PR mache, Es bringt auch alle Commits zwischen seinem Zweig und dem Upstream. Ich möchte nur meinen neuesten commnit verwenden.

Angenommen, die Person ist stur und will nicht seine Branche aktualisieren. Wie würde ich darüber gehen?

Meine Lösung ist im Moment, nur auf seinen aktuellen Zweig zurückzusetzen und ziemlich manuell alle meine Änderungen hinzuzufügen und dann das Commit zu erstellen. Es würde zu lange dauern.

Gibt es einen besseren Weg?

Antwort

1

Kopieren Sie Ihren Commit (oder Satz von Commits) zu einem neuen Commit (oder Satz von Commits), der nach dem letzten Commit der anderen Person kommt.

Dies ist ein wenig verwirrend, daher könnte es hilfreich sein, hier drei Namen zu haben. Sie haben Ihre eigenen Commits, die wir für Viet mit V beschriften könnten. Es sind (mindestens) zwei weitere Personen beteiligt: ​​Ihr Arbeitgeber E und Ihr vorgelagerter U.

Ihr Upstream war die neueste:

...--E--F--G--H--I <-- master (in U) 

Sie geklont ihre Repository, alle Commits bekommen, fügte dann selbst:

...--E--F--G--H--I <-- upstream/master (in V) 
        \ 
        J--K--L <-- master (in V) 

Inzwischen Ihr Arbeitgeber ist hinter:

...--E--F--G <-- master (in E) 

Wenn Sie eine Pull-Anfrage machen, Ihre Anfrage sagt "nehmen commits durch L". Für Mr. U, das sind Ihre drei Commits, J--K--L, weil sein master bei I endet. Für Herrn E sind das jedoch Ihre drei Verpflichtungen plus die von Herrn U.

Also, wenn Sie sich jetzt Ihre ursprünglichen Commits Commits kopieren, die nach G kommen:

   J'--K'--L' <-- anotherbranch (in V) 
      /
...--E--F--G--H--I <-- upstream/master (in V) 
        \ 
        J--K--L <-- master (in V) 

Sie können nun, Herr E, eine Anforderung senden, die er L' begehen ziehen. Da seine Commit-Zeichenkette beim Commit G endet, sendet er ihm J', K' und .

Herr E wird wahrscheinlich wahrscheinlich aktualisieren, um U zu entsprechen.Wenn er das tut, muss er sich entscheiden, was er mit der Tatsache anfangen soll, dass er mit sowohlJ'--K'--L'als auchJ--K--L endet. Sie müssen auch entscheiden, ob Sie beide Kopien Ihrer Commits behalten wollen.

Hinweis: Sie können diesen git cherry-pick mit Kopiervorgang begehen tun (was recht einfach ist), oder mit git rebase (der cherry-pick mit einer letzten git reset am Ende einen Zweignamen zu bewegen, eine Art automatisiert ist um das Original zugunsten der neuen Kopien zu "vergessen". Der Cherry-Pick ist konzeptuell einfacher, und da diese spezielle Operation rückwärts läuft (backporting), würde ich persönlich hier bleiben, wenn nicht andere (unvorhergesehene/nicht offenbarte) Überlegungen dies außer Kraft setzen.

+0

Schätzen Sie die Erklärungen :) Viel einfacher zu verstehen, jetzt –

1

Sie können Kirschen pflücken: https://git-scm.com/docs/git-cherry-pick Erstellen Sie einen neuen Zweig durch Kirschen Kommissionierung der Commit, die Sie in Ihre PR aufnehmen möchten. Und erstellen Sie Ihre PR.

+0

Danke! Cherry Pick war der Weg zu gehen –