it-swarm.com.de

Holen Sie sich den Unterschied zwischen zwei Zweigen in Git

Ich habe folgendes getan (ich habe dies im Vergleich zu einer Realität vereinfacht):

  • hat einen Branch erstellt Branch1 , zu dem gewechselt wurde
  • datei Datei1 hinzugefügt und vorhandene Datei Datei2 geändert und festgeschrieben
  • herausgefunden, dass ich nicht brauche Datei1 , es entfernt und dies festgeschrieben

Der tatsächliche Unterschied zwischen ursprünglichem Zweig und Zweig1 ist also nur eine Änderung von Datei2 .

Ich möchte diesen tatsächlichen Unterschied zwischen Zweigen erhalten und in Branch2 setzen. Im Allgemeinen möchte ich den nicht notwendigen Verlauf des Hinzufügens/Entfernens von File1 loswerden.

46
Victor Ronin

Angenommen, Sie haben mit dem Zweig master begonnen. Dann können Sie tun:

git diff master Branch1 > ../patchfile
git checkout Branch2    
git apply ../patchfile

Wenn Sie alternativ den Verlauf neu schreiben möchten, können Sie ein interaktives Rebase verwenden, um Commits zu quetschen.

109
Klas Mellbourn

Dies ist ein einfacher Git Diff

git diff --name-only SHA1 SHA2

Wobei SHA1/2 die Hashes der 2 Commits oben in jedem Zweig sind.

Oder du kannst es tun

git diff --name-only develop...

Um Ihren Zweig mit dem Zweig develop zu vergleichen

6
MaxK

Ich würde ein interaktives Rebase für HEAD~2 Durchführen und die letzten beiden Commits zusammen drücken. Angenommen, Sie möchten den Verlauf in Branch1 Beibehalten und ihn in Branch2 Vereinfachen, gehen Sie wie folgt vor (aktueller Zweig Branch1):

git checkout -b Branch2
git rebase -i 'HEAD~2'

Ein Editor öffnet sich und zeigt so etwas an

pick 1b58da0 Added File1, changed File2
pick d3f4f51 Delete File1

und viele erläuternde Kommentare, wie das Umbasieren funktioniert. Ändern Sie das letzte Commit in ein squash und schließen Sie den Editor.

pick 1b58da0 Added File1, changed File2
squash d3f4f51 Delete File1

Ein neuer Editor wird geöffnet, in dem Sie die neue Festschreibungsnachricht angeben können. Es würde wahrscheinlich jetzt nur lesen

Geänderte Datei2

Schließen Sie es und Sie sind fertig, beide Commits werden auf Branch2 Zusammengedrückt und Branch1 Behält Ihren ursprünglichen Verlauf bei. Beachten Sie, dass Sie, wenn Sie den ursprünglichen Verlauf nicht beibehalten müssen, das Auschecken von Branch2 Überspringen und direkt an Branch1 Arbeiten können. Tun Sie dies nur, wenn Sie Ihre letzten beiden Commits noch nicht auf Branch1 Veröffentlicht haben.

0
sebastian