2011-01-06 8 views
8

ich in meinem .emacs Verzeichnis ziehen, und drücken Sie die folgenden Konflikt:Nach git rm-Datei; commit - Wie bekomme ich die Datei von der entfernten Niederlassung zurück?

CONFLICT (add/add): Merge conflict in elisp/dired-details+.el 

Git Status zeigte folgendes:

Unmerged paths: 
# (use "git add/rm <file>..." as appropriate to mark resolution) 
# both added:   elisp/dired-details+.el 

Okay, so schlug git git rm verwenden. Ich möchte die lokale Datei vollständig durch die Datei ersetzen, die ich einziehe, also scheint es irgendwie vernünftig zu sein ... So 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.

Nun gut Alles verschmilzt, mit Ausnahme von I dired-details+.el fehle, ich irgendwie verwirrt bin, und ich möchte die Antworten auf die folgenden wissen:

  1. Wie ich git-rm rückgängig gemacht werden kann und die Datei erhalten aus der Remote-Zweig? ..
  2. Warum gab es einen Konflikt in erster Linie? .. Was mit add/add hier los? ..
  3. Was habe ich statt git-rm ‚ing die Datei getan, was ich ersetzen wollte? ..

Antwort

9

Zuerst rückgängig machen Sie Ihre Zusammenführung Commit mit git reset --hard HEAD^. 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 helfen, dies zu visualisieren.

Zweitens, git rm tut 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 Sie die Datei überhaupt nicht mehr haben wollen, 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 von der Zweigstelle möchten, aus der Sie zusammenführen, können Sie dazu git show :3:elisp/dired-details+.el > elisp/dired-details+.el verwenden. Dann git add elisp/dired-details+.el, um Git zu sagen, dass Sie den Konflikt in dieser Datei gelöst haben und dann git commit zu 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.

+0

Nun, alles scheint im Nachhinein so offensichtlich. Ich wusste nicht über die: n: -Notation, scheint ziemlich nützlich. –

Verwandte Themen