2017-02-13 1 views
0

Um sauber lineare Geschichte stromaufwärts zu halten, kann sich entscheiden, Pull-Anforderung zu quetschen und es auf den Verlauf neu zu erstellen.Wie kann ich feststellen, dass meine Git-Pull-Anforderung oben gequetscht und rebasiert wurde und was sollte ich lokal tun?

In diesem Fall würde Revisions-Hash der resultierenden Änderung von Revisionen meiner persönlichen Bemühungen abweichen.

Wie kann ich erkennen, dass meine Änderungen in Upstream mit nur git Befehl ohne externe Hooks (wie Senden von E-Mail auf Rebase/Squash zum ursprünglichen Autor) oder manuelle Überprüfung neuer Patches über git log -p, etc?

Weil Rebase/Squash destruktive Befehle sind, nachdem ich meinen Beitrag zum Upstream entdeckt habe, sollte ich meine ursprünglichen Bemühungen entfernen, weil sie nicht mit dem Upstream-Verlauf nach dem Neuschreiben von Historien zusammenhängen. Wie kann ich das in meinem lokalen Repository tun?

+1

Im allgemeinen Fall kann man nicht: jemand könnte deine Anfrage annehmen, sie auf ein einziges Commit herunterkochen, aber dann statt das zu tun t direkt, * modify * es (vielleicht willkürlich) in etwas, das nicht mehr entspricht, was Sie eingereicht haben, und begehen Sie das. Vorausgesetzt, dass sie das nicht tun, wird 'git diff 'die beiden" end point commits "(Ihr endgültiges Commit und ihr gequetschtes), den Trick machen, wie in den Antworten, die ich unten sehe. – torek

+0

** @ torek ** Also nur die Option ist Workflow-Tool zu verwenden und Relais auf seine automatisierten Benachrichtigungen (wie GitHub/BitBacket). OK. Ich denke, das * Rebasing ändert sich regelmäßig von oben * gib mir einen Hinweis durch * riesigen Konflikt *, wenn meine (oder ähnliche) Änderungen von Upstream angewendet werden ... – gavenkoa

Antwort

1

Normalerweise verwende ich git diff, um zu überprüfen, dass ich während des Quetschens nicht versehentlich Sachen weggeworfen habe.

Sie haben also Ihre lokale Revision abcdabcd und diese wurde mit einem Remote-Repo zusammengeführt, was einen neuen Hash cdefcdef ergibt.

Dann könnten Sie

git diff abcdabcd cdefcdef 

, um Unterschiede zu erkennen.

Wenn Sie nur daran interessiert, die Dateien sind, die Sie tatsächlich in abcdabcd geändert, könnten Sie die Operation auf die geänderten Dateien begrenzen

git diff abcdabcd cdefcdef -- $(git diff --name-only abcdabcd~..abcdabcd) 
1

git diff <rebase/squash> <PR'd-changes>

Alles, was Sie tun müssen, um den Zustand zu vergleichen, des Repositories beim Commit, das in das Commit rebasiert/eingequetscht wurde.

Verwandte Themen