develop branch
--> dashboard (working branch)
Ich verwende git merge --no-ff develop
, um vorgelagerte Änderungen im Dashboard zusammenzuführen
Git-Protokoll:
commit 88113a64a21bf8a51409ee2a1321442fd08db705
Merge: 981bc20 888a557
Author: XXXX <>
Date: Mon Jul 30 08:16:46 2012 -0500
Merge branch 'develop' into dashboard
commit 888a5572428a372f15a52106b8d74ff910493f01
Author: root <[email protected]>
Date: Sun Jul 29 10:49:21 2012 -0500
fixed end date edit display to have leading 0
commit 167ad941726c876349bfa445873bdcd475eb8cd8
Author: XXXX <>
Date: Sun Jul 29 09:13:24 2012 -0500
Die Zusammenführung hatte mehr als 50 Commits und ich frage mich, wie ich die Zusammenführung einfach zurücksetzen kann, damit das Dashboard wieder zum Status vor der Zusammenführung zurückkehrt
Der zweite Teil davon ist, wenn ich nicht zusammenführe --no-ff
, bekomme ich nicht das Commit " Zweig zusammenführen", das sich zu einem Dashboard entwickelt . Wie würde ich diese Zusammenführung zurücksetzen?
Antworten:
Das Zurücksetzen eines Zusammenführungs-Commits wurde in anderen Fragen ausführlich behandelt . Wenn Sie eine Schnellvorlaufzusammenführung durchführen, die zweite, die Sie beschreiben, können Sie verwenden
git reset
, um zum vorherigen Status zurückzukehren:Sie können das finden
<commit_before_merge>
mitgit reflog
,git log
oder, wenn Sie die moxy fühlen (und nicht getan haben etwas anderes):git reset --hard HEAD@{1}
quelle
reflog
ein Lebensretter.HEAD@{1}
beschreibt nur den zweitletzten Zustand von HEAD oder eher technisch: "Ein Verweis gefolgt vom Suffix @ mit einer Ordnungszahl, die in einem Klammerpaar eingeschlossen ist (z. B. {1}, {15}), gibt den n-ten vorherigen Wert an ref. "Von hier:
http://www.christianengvall.se/undo-pushed-merge-git/
Git Revert fügt ein neues Commit hinzu, das das angegebene Commit zurücksetzt.
Die Verwendung von -m 1 zeigt an, dass dies eine Zusammenführung ist und wir ein Rollback zum übergeordneten Commit im Hauptzweig durchführen möchten. Sie würden -m 2 verwenden, um den Entwicklungszweig anzugeben.
quelle
here
Link im @ Hilikus-Kommentar nicht mehr gültig. Die Site behauptet, der Inhalt sei in ein Buch verschoben worden ( git-scm.com/book/en/v2 ), aber wenn ja, ist es nicht trivial, dort zu suchen .Setzen Sie einfach das Zusammenführungs-Commit mit zurück
git reset --hard HEAD^
.Wenn Sie --no-ff git verwenden, wird immer eine Zusammenführung erstellt, auch wenn Sie dazwischen nichts festgeschrieben haben. Ohne --no-ff führt git nur einen schnellen Vorlauf durch, was bedeutet, dass der HEAD Ihrer Zweige auf HEAD des zusammengeführten Zweigs gesetzt wird. Um dies zu beheben, suchen Sie die Commit-ID, zu der Sie zurückkehren möchten, und
git reset --hard $COMMITID
.quelle
Kann aber unerwartete Nebenwirkungen haben. Siehe
--mainline parent-number
Option in git-scm.com/docs/git-revertEin brutaler, aber effektiver Weg wäre vielleicht, das linke übergeordnete Element dieses Commits auszuchecken, eine Kopie aller Dateien zu erstellen,
HEAD
erneut auszuchecken und den gesamten Inhalt durch die alten Dateien zu ersetzen. Dann wird git Ihnen sagen, was zurückgesetzt wird und Sie erstellen Ihr eigenes Revert-Commit :)!quelle
Reverting a merge commit declares that you will never want the tree changes brought in by the merge. As a result, later merges will only bring in tree changes introduced by commits that are not ancestors of the previously reverted merge. This may or may not be what you want.
git reset
ist die Lösung, erwähnen aber auch, dass es unerwartete Nebenwirkungen haben könnte. Dieser Link stammt jedochgit revert
nicht vongit reset
:)git revert
nicht sagengit reset
Wenn Sie den Zweig zusammengeführt haben, haben Sie die Zusammenführung mithilfe einer Pull-Anforderung zurückgesetzt und diese Pull-Anforderung zum Zurücksetzen zusammengeführt.
Der einfachste Weg, den ich fühlte, war:
git revert -m 1 xxxxxx
(wenn das Zurücksetzen über einen Zweig zusammengeführt wurde) oder mit zurückgit revert xxxxxx
wenn es sich um ein einfaches Zurücksetzen handeltequelle