Ich habe gerade eine gemacht git pull --rebase origin master
und es gab einen Konflikt.
Erstens befand sich dieser Konflikt in einer Datei, die ich nicht berührt hatte, und war ungefähr 10 Commits zurück. Warum passiert das?
Ich habe dann versehentlich getippt git rebase --skip
und es hat diesen Patch übersprungen.
Besorgt darüber, dass ich ein Commit übersprungen hatte, überprüfte ich eine neue Version des Hauptzweigs und machte einen Unterschied zwischen dem Zweig, auf dem ich die Rebase durchgeführt hatte, und dem neuen Hauptzweig. Die einzigen Änderungen, die im Diff angezeigt werden, sind das letzte Festschreiben. Wenn Sie sich das Protokoll ansehen, wird der Patch, der übersprungen wurde, im Festschreibungsverlauf angezeigt.
Kann jemand erklären, was hier los ist?
git rebase --skip
. Vielleicht falsch? :)Antworten:
Es macht das, was es sagt, es überspringt ein Commit. Wenn du läufst
rebase --abort
bei einem späteren Konflikt während derselben Rebase ausgeführt werden, wird das übersprungene Commit natürlich auch zurückgesetzt.Wenn Ihre Änderung bereits im Upstream vorhanden war, kann Git Ihr Commit nicht anwenden (sollte es jedoch normalerweise automatisch überspringen, wenn der Patch genau der gleiche ist). Ihr eigenes Commit wird übersprungen, aber die Änderung bleibt im aktuellen HEAD bestehen, da sie bereits vorgelagert angewendet wurde.
Sie sollten wirklich sicherstellen, dass Sie keine wichtige Änderung von Ihnen entfernt haben;) (Verwenden Sie das Reflog, um zum Zustand vor der Rebase zurückzukehren.)
quelle
--skip
es der richtige Weg ist. Beim Überspringen wird ein Commit vollständig übersprungen, und alle in diesem Commit vorgenommenen Änderungen werden gelöscht.git rebase
als das Kopieren von Commits von einem Zweig auf einen anderen Zweig. Wenn Sie also ein Commit überspringen, wird der ursprüngliche Inhalt des Commits übersprungen und der Patch wird nicht angewendet (sodass alle an einer Datei vorgenommenen Änderungen nicht in Ihren Zielzweig gelangen). Am einfachsten ist es, ein einfaches Git-Repository mit zwei Zweigen mit jeweils mehreren Commits einzurichten und dann zu versuchen, ein Commit neu zu starten und zu überspringen (Sie könnengit rebase --interactive
angeben, welche Commits kopiert (pick
) oder übersprungen (skip
) werden