2010-08-24 14 views
6

Ich habe einen Master-Zweig von einem Freund Repository in meinem Arbeitsverzeichnis in branch_a mit fusionierte:Git: Wie nach dem Zusammenführen zurückgesetzt?

git pull my_friend master 

ich, dass die fusionierte Version Fehler hat entdeckt haben. Um die Entwicklung fortzusetzen, möchte ich zu meinem letzten Commit vor der Zusammenführung zurückkehren.
Ich habe versucht:

git reset --hard HEAD 

Aber das brachte mich direkt nach der Zusammenführung in den Zustand zurück. (Nicht ziehen Befehl begehen ?!)
ich auch versucht:

git revert HEAD 

erhielt aber den folgenden Fehler:

fatal: Commit 2d72d8f367b987d8c16f5cb1a543a6886acdcf83 is a merge but no -m option was given.

Was soll ich tun?

+0

Ich habe 'Zurücksetzen' in Ihrem Titel zurückgesetzt, weil Reset ist, was Sie versuchten zu erreichen. –

Antwort

23

HEAD bezieht sich auf die aktuelle Festschreibung (in der Regel die Spitze der aktuell ausgecheckten Verzweigung). Sie haben Ihre Zusammenführung bereits festgelegt, sodass HEAD auf das Zusammenführungs-Commit verweist. Wenn Sie, bevor es wieder auf die commit erhalten möchten, verwenden:

git reset --hard HEAD^ 

Die ^ bedeutet „erste Elternteil“; Bei einem regulären Commit handelt es sich um das einzige übergeordnete Element, und bei einem Merge-Commit handelt es sich um das Commit, das Sie beim Zusammenführen ausgecheckt haben (d. h. das vorherige Tipp des Zweiges, in das Sie eingebunden sind).

Und natürlich, wenn Sie jemals wirklich verloren gehen, öffnen Sie einfach gitk up und entweder copy/paste die SHA1 des begehen Sie darauf (git reset --hard SHA1) oder der rechten Maustaste zurücksetzen möchten und setzen innerhalb gitk.

Übrigens bedeutet revert nicht, was Sie denken, dass es tut (es klingt wie Sie es auf eine Svn-Weise verwenden, vielleicht? Aber ich habe nie svn verwendet). git revert wird verwendet, um ein Commit zu erstellen, das ein vorheriges Commit durch Anwendung des umgekehrten Diffs aufhebt (rückgängig macht). Sie verwenden es, wenn Sie eine einzelne vorherige Commit-Operation rückgängig machen möchten, die bereits veröffentlicht wurde.

+0

Für Leute, die nicht hart zurücksetzen wollen, wie @Jefromi sagt, benutze 'git revert', um das letzte Commit rückgängig zu machen und einen Verlauf beider Ereignisse zu hinterlassen. Für mehr Informationen über 'git revert' siehe: [diese Antwort] (http://stackoverflow.com/a/5971281/1185053) –

2

Nach dem Pull wurde HEAD auf das neueste Commit verschoben, welches das Zusammenführen ist, das die beiden Zweige zusammenbringt, nicht das Commit, an dem Sie zuletzt gearbeitet haben. Das ist der Grund, warum reset HEAD nichts ändert.

revert HEAD ist nicht das, was Sie auch tun möchten, weil das versucht, ein neues Commit zu erstellen, das die Änderungen des Zusammenführungs-Commits zurücknimmt. (Aus diesem Grund ist ein Fehler angezeigt, Sie kein merge begehen, ohne zu sagen git zurückkehren kann, welche der beiden Eltern verpflichtet Sie zurückkehren möchten.)

Ich denke, was Sie wollen, ist:

git reset [--hard] HEAD^ 

, die auf das Commit vor der Zusammenführung Commit zurückgesetzt wird.

2

does pull command commit?

Ja, tut es. Pull ist eine Umhüllung über fetch und merge.Wenn Sie die Änderungen vor dem Zusammenführen sehen möchten, können Sie einfach fetch

Verwandte Themen