Ich denke nicht, dass dies mit der Frage gemeint ist. Bei einer umgekehrten Zusammenführung in SVN werden auch die Änderungen vom Festschreiben in lokale Änderungen zurückgesetzt, sodass Sie sie bearbeiten und erneut festschreiben können.
Verwenden Sie Folgendes, um ein neues Commit zu erstellen, mit dem die Änderungen eines früheren Commits rückgängig gemacht werden:
$ git revert <commit>
Es ist auch möglich, ein Commit von einem beliebigen Punkt in der Vergangenheit durch erneutes Basieren und anschließendes Zurücksetzen zu entfernen. Dies möchten Sie jedoch nicht, wenn Sie Ihre Commits bereits in ein anderes Repository verschoben haben (oder eine andere Person von Ihnen abgerufen hat). .
Sie müssten wahrscheinlich eine -m <parent number>Option git revertangeben , um anzugeben, welche Änderung zurückgesetzt werden soll. Wenn Sie eine Zusammenführung von nicht veröffentlichtem Verlauf rückgängig machen möchten, verwenden Sie git reset --hard HEAD^1.
Jakub Narębski
3
Jakub: Das stimmt, wenn Sie ein Merge-Commit zurücksetzen, aber in der Subversion-Terminologie ist "Reverse-Merge" eigentlich einfach der Name für das Zurücksetzen jeglicher Art von Commit.
Ben James
4
Beachten Sie, dass die Verwendung -mbedeutet, dass eine zukünftige Zusammenführung aus dem nicht zusammengeführten Zweig nicht die Änderungen vor dieser Zusammenführung enthält! Unter schacon.github.com/git/howto/revert-a-faulty-merge.txt finden Sie geeignete Methoden zum erneuten Zusammenführen eines nicht zusammengeführten Zweigs.
Martijn Pieters
125
Um ein Zusammenführungs- Commit zurückzusetzen, müssen Sie Folgendes verwenden : git revert -m <parent number>. Um beispielsweise das zuletzt zusammengeführte Commit mit dem übergeordneten Element mit der Nummer 1 zurückzusetzen, würden Sie Folgendes verwenden:
git revert -m 1 HEAD
Um ein Zusammenführungs-Commit vor dem letzten Commit zurückzusetzen, gehen Sie wie folgt vor:
git revert -m 1 HEAD^
Verwenden Sie git show <merge commit SHA1>, um die Eltern zu sehen, die Nummerierung ist die Reihenfolge, in der sie erscheinen, zMerge: e4c54b3 4725ad2
Wie können Sie die dem Elternteil zugeordnete 'Nummer' erhalten? Haben Zweige eine intrinsische numerische 'ID'?
Daniyalzade
7
Verwenden Sie git show <merge commit SHA1>, um die Eltern zu sehen, die Nummerierung ist die Reihenfolge, in der sie erscheinen, zBMerge: e4c54b3 4725ad2
Supermethode
8
Beispiel: git revert -m 1 SHA1Dieser Befehl hat bei mir funktioniert, um ein Zusammenführungs-Commit zurückzusetzen, bei dem es sich um mehrere Zusammenführungs-Commits vor dem Kopf handelte und unter denen viele Commits lagen.
c.apolzon
3
Welches sind die Eltern? E4c54b3 oder 4725ad2?
Dolphin
1
Dies liefert immer noch nicht genügend Informationen darüber, wie sich die Ergebnisse von git show auf übergeordnete Nummern beziehen. Ist die "Reihenfolge, in der sie erscheinen" 1-basiert? 0-basiert? Was ist in diesem Beispiel speziell der SHA1 von Elternteil 1? e4c54b3 oder 4725ad2?
Cowlinator
4
Wenn ich dich richtig verstehe, redest du davon, a
svn merge -rn:n-1
In diesem Fall suchen Sie wahrscheinlich nach einem früheren Commit
Dies wirft das Zusammenführungs-Commit weg, das nicht das tut, was das Originalplakat verlangt. Das OP versucht, einen umgekehrten Patch durchzuführen, um frühere Änderungen rückgängig zu machen, und nicht den Verlauf der vorherigen Änderungen insgesamt zu löschen.
-1
Wenn Sie nicht oder später festschreiben möchten (die Festschreibungsnachricht wird weiterhin für Sie vorbereitet, die Sie auch bearbeiten können):
Antworten:
Verwenden Sie Folgendes, um ein neues Commit zu erstellen, mit dem die Änderungen eines früheren Commits rückgängig gemacht werden:
Es ist auch möglich, ein Commit von einem beliebigen Punkt in der Vergangenheit durch erneutes Basieren und anschließendes Zurücksetzen zu entfernen. Dies möchten Sie jedoch nicht, wenn Sie Ihre Commits bereits in ein anderes Repository verschoben haben (oder eine andere Person von Ihnen abgerufen hat). .
quelle
-m <parent number>
Optiongit revert
angeben , um anzugeben, welche Änderung zurückgesetzt werden soll. Wenn Sie eine Zusammenführung von nicht veröffentlichtem Verlauf rückgängig machen möchten, verwenden Siegit reset --hard HEAD^1
.-m
bedeutet, dass eine zukünftige Zusammenführung aus dem nicht zusammengeführten Zweig nicht die Änderungen vor dieser Zusammenführung enthält! Unter schacon.github.com/git/howto/revert-a-faulty-merge.txt finden Sie geeignete Methoden zum erneuten Zusammenführen eines nicht zusammengeführten Zweigs.Um ein Zusammenführungs- Commit zurückzusetzen, müssen Sie Folgendes verwenden :
git revert -m <parent number>
. Um beispielsweise das zuletzt zusammengeführte Commit mit dem übergeordneten Element mit der Nummer 1 zurückzusetzen, würden Sie Folgendes verwenden:Um ein Zusammenführungs-Commit vor dem letzten Commit zurückzusetzen, gehen Sie wie folgt vor:
Verwenden Sie
git show <merge commit SHA1>
, um die Eltern zu sehen, die Nummerierung ist die Reihenfolge, in der sie erscheinen, zMerge: e4c54b3 4725ad2
Dokumentation zum Zusammenführen von Git: http://schacon.github.com/git/git-merge.html
Diskussion zum Zusammenführen von Git (verwirrend, aber sehr detailliert): http://schacon.github.com/git/howto/revert-a-faulty-merge.txt
quelle
git show <merge commit SHA1>
, um die Eltern zu sehen, die Nummerierung ist die Reihenfolge, in der sie erscheinen, zBMerge: e4c54b3 4725ad2
git revert -m 1 SHA1
Dieser Befehl hat bei mir funktioniert, um ein Zusammenführungs-Commit zurückzusetzen, bei dem es sich um mehrere Zusammenführungs-Commits vor dem Kopf handelte und unter denen viele Commits lagen.Wenn ich dich richtig verstehe, redest du davon, a
In diesem Fall suchen Sie wahrscheinlich nach einem früheren Commit
quelle
Verwenden Sie den obigen Befehl, um Zusammenführungsänderungen rückgängig zu machen.
quelle
Wenn Sie nicht oder später festschreiben möchten (die Festschreibungsnachricht wird weiterhin für Sie vorbereitet, die Sie auch bearbeiten können):
quelle