Nach git rm-Datei; commit - Wie bekomme ich die Datei von der entfernten Niederlassung zurück?

8

Ich habe mein .emacs-Verzeichnis abgerufen und den folgenden Konflikt gefunden:

%Vor%

Git Status zeigte folgendes:

%Vor%

Okay, also schlug git vor, git rm zu verwenden. Ich möchte die lokale Datei vollständig durch die Datei ersetzen, die ich einlese, also scheint es irgendwie vernünftig zu sein ... Also mache ich git rm elisp/dired-details+.el und git merge . Ich bekomme:

git merge: fatal: Sie haben Ihre Zusammenführung nicht abgeschlossen (MERGE_HEAD existiert). Bitte bestätigen Sie Ihre Änderungen, bevor Sie sie zusammenführen können.

Okay, gut: git commit -a -m "ugh merge conflicts" ; git pull origin master .

Jetzt geht alles gut zusammen, außer dass mir dired-details+.el fehlt, ich bin irgendwie verwirrt, und ich würde gerne die Antworten auf Folgendes wissen:

  1. Wie mache ich git-rm rückgängig und erhalte diese Datei von der Remote-Zweigstelle? ..
  2. Warum gab es überhaupt einen Konflikt? .. Was passiert hier mit add/add ? ..
  3. Was hätte ich anstelle von git-rm 'der Datei, die ich ersetzen wollte, getan? ..
Leo Alekseyev 06.01.2011, 09:35
quelle

1 Antwort

9

Machen Sie zunächst Ihren Zusammenführungs-Commit mit git reset --hard HEAD^ rückgängig. Beachten Sie, dass dies das letzte Commit löscht und Ihre Arbeitskopie auf den Status des vorherigen Commits zurücksetzt. Seien Sie also vorsichtig, bevor Sie das tun. gitk kann dabei helfen, dies zu visualisieren.

Zweitens macht git rm nicht, was Sie hier erwartet haben. Wenn Sie einen Zusammenführungskonflikt haben, betrachten Sie die Datei in einem halb zusammengeführten Zustand, wobei die Datei Konfliktmarkierungen enthält, damit Sie den Konflikt lösen können. An diesem Punkt werden Sie aufgefordert, die Arbeitskopie in dem Zustand zu fixieren, in dem der endgültige Zusammenführungs-Commit aussehen soll. Durch das Entfernen der Datei haben Sie Git gesagt, dass die Datei überhaupt nicht mehr vorhanden sein soll, was Sie nicht wollten.

In diesem Stadium müssen Sie die in Konflikt stehende Datei in Ihrer Arbeitskopie auf die Version aktualisieren, die Sie behalten möchten. Üblicherweise geschieht dies, indem die Konfliktmarker untersucht und die Datei entsprechend angepasst wird. Wenn Sie in Ihrem Fall sicher sind, dass Sie die Kopie aus der Zweigstelle, aus der Sie zusammenführen, möchten, können Sie git show :3:elisp/dired-details+.el > elisp/dired-details+.el dazu verwenden. Dann git add elisp/dired-details+.el , um git mitzuteilen, dass Sie den Konflikt in dieser Datei gelöst haben und dann git commit beenden.

Hier fordert git show :3:... die Version der Datei von MERGE_HEAD an. Wenn Sie eine andere Version benötigen, können Sie auch 1 für den gemeinsamen Vorfahren oder 2 für "Ihre" Seite der Zusammenführung verwenden.

    
Robie Basak 06.01.2011, 10:46
quelle

Tags und Links