it-swarm.com.de

Git merge links HEAD Markierungen in meinen Dateien

Ich habe versucht, eine Datei in der Befehlszeile mit Git zusammenzuführen, als eine Fehlermeldung angezeigt wurde, dass die Zusammenführung abgebrochen wurde. 

Ich dachte, das wäre das Ende, aber dann wurde mir klar, dass es in meinen Dateien Gitarren gibt. So wie:

start =
    expression

validchar = 
    [0-9a-zA-Z_?!+\[email protected]#$%^&*/.]

integer = 
<<<<<<< HEAD
    digits:[0-9]+
        { return digits.join(""); }
=======
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages

Die Dateien wurden nicht von mir bearbeitet und zeigen eingefügte Zeilen mit: 

  • KOPF nach weniger als Zeichen (<<<<<<< HEAD)
  • zeilen mit geändertem Code 
  • eine Folge von Gleichheitszeichen (=======)
  • die neue Version des Codes
  • eine andere Zeile, die mit größeren als -Zeichen und dem Namen des Zweigs beginnt (>>>>>>> gh-pages)

Schlimmer ist, dass der Inhalt der Datei nicht mehr in Ordnung ist. Weiß jemand, wie ich diese Dateien wieder normalisiert und die Änderungen, die ich im gh-Zweig vorgenommen habe, in den Master-Zweig einfließen?

72
lowerkey

Das sind Konfliktmarkierungen . Sie sind noch im Prozess des Zusammenführens, aber es gab einige Teile, die Git nicht automatisch zusammenführen konnte. Sie müssen diese Teile von Hand bearbeiten zu dem, was Sie möchten, und dann die Ergebnisse festlegen.


In Ihrem speziellen Fall möchten Sie es beispielsweise so lösen (Hinweis - die Pfeile/der Text rechts sind nur meine Notizen und nicht etwas, das Sie in die Datei eingeben):

integer = 
<<<<<<< HEAD                                  <-+ remove the bits here
    digits:[0-9]+                               |
        { return digits.join(""); }             |
=======                                       <-+
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages                              <-- and this

und so würden Sie die Datei speichern als ...

integer = 
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
79
Amber

Fange unbedingt mit 'git status' an, um zu sehen, was du hast. Wenn Sie eine Zusammenführung abgebrochen haben (oder eine Zusammenführung abgebrochen wurde) und im Arbeitsverzeichnis konfliktierte Dateien vorhanden sind, ist ein Fehler aufgetreten. Der Git-Status sagt dir, wo du bist. Danach haben Sie eine Reihe von Optionen. Sie sollten das Zusammenführungs-Commit entweder manuell lösen, was eine Herausforderung darstellen kann, oder ein Tool verwenden, das wie folgt lautet:

git mergetool

Das Zusammenführungstool funktioniert, wenn für Ihre Dateien eine Zusammenführung erforderlich ist. 

Sie können auch eine der folgenden Aktionen ausführen:

git checkout --ours -- /path/to/conflicted-file       # this is probably the one you want
git checkout --theirs -- /path/to/conflicted-file

Sie können die verschiedenen Versionen mit der Syntax: 1: Dateiname anzeigen. hier für eine Erklärung. Bei allen oben genannten Voraussetzungen wird jedoch davon ausgegangen, dass "git status" die Dateien so anzeigt, dass eine Zusammenführung erforderlich ist.

Schließlich haben Sie immer die Möglichkeit:

git reset --hard   # sounds like --hard is what you need but check other options
19
GoZoner

Alle Antworten sind richtig, aber wenn Sie alle Konfliktmarken automatisch entfernen und die Dateien automatisch ändern möchten, um HEAD beizubehalten, können Sie ein eigenes Bash-Skript wie

Beispielskript:

# vim /usr/sbin/solve.git

(Anhängen folgend)

#!/bin/bash
for f in $(grep -Rl '^>>>>>>> ' --include="*.php" --include="*.css" --include="*.js" --include="*.html" --include="*.svg" --include="*.txt" .)
do
sed -i -e '/^=======/,/^>>>>>>> /d' -e '/^<<<<<<< /d' $f
sed -i -e '/^>>>>>>> /d' $f
echo "$f Fixed"
done
git add . ; git commit -am "[+] Resolved on `date` from `hostname` by `whoami`" --no-verify

# chmod 755 /usr/sbin/solve.git

Führen Sie es einfach in Ihrem GIT-Repo/Pfad aus, um das Problem zu beheben

$ cd <path_to_repo>
$ solve.git 

Hinweis: - Die oben genannten Dateierweiterungen lauten php, css, js, html, svg und txt. 

1
Mr. Pundir

Ich komme aus dieser Frage . Und ich wollte eine automatisierte Methode zum Zusammenführen der halb zusammengeführten Dateien, anstatt die Dateien manuell zu bearbeiten (wie in anderen Antworten vorgeschlagen, was ich nicht wirklich bequem finde). Also, was ich am Ende über Netbeans getan habe, kann aber auch über die Befehlszeile erfolgen.

Denken Sie daran, dies funktioniert nur, wenn Sie unmittelbar nach dem merge->add->commit erkannt haben, dass Sie sich vermasselt haben und den Vorgang wiederholen möchten.

SCHRITT 1: Zurücksetzen auf einen vorherigen Commit.

git reset --hard a992a93f9312c6fa07c3a1b471c85e9fbf767d0e

SCHRITT 2: Erneut versuchen, den Zweig zusammenzuführen 

git merge --ff Origin/feature/YOUR-Branch_here

An dieser Stelle wird das Zusammenführungsfenster angezeigt, wenn Sie eine GUI verwenden. und Sie können dann wie gewohnt vorgehen.

0

In Atom hatte ich das Problem, dass einige Dateien die aufgelösten Zusammenführungskonflikte nicht auf dem Laufwerk gespeichert haben. Daher musste ich manuell auf "Speichern" klicken.

0
Timar Ivo Batis