it-swarm.com.de

Wie erzwinge ich einen Zusammenschluss, um bei Konflikten erfolgreich zu sein?

Ich versuche, eine Pull-Anfrage zusammenzuführen, die einen Konflikt in einer Datei enthält (siehe unten). Die Anweisungen zum Zusammenführen der Pull-Anforderung lauten bereitgestellt von github wie folgt. Es ist wichtig, diese Zusammenführung durchzuführen, damit die Person, die die Pr einreicht, eine Gutschrift dafür erhält.

# Step 1: From your project repository, check out a new branch and test the changes.
git checkout -b droark-master master
git pull https://github.com/droark/cryptopp.git master

# Step 2: Merge the changes and update on GitHub.
git checkout master
git merge --no-ff droark-master
git Push Origin master

Ich weiß, wie man die eine Zeile in der einen widersprüchlichen Datei behebt. Ich weiß nicht, wie ich Git dazu bringen soll, die Zusammenführung durchzuführen und mich nicht mehr über kaputte Indexdateien zu beschweren.

Wie kann ich Git veranlassen, die Zusammenführung durchzuführen, sicherzustellen, dass die Person, die die Pull-Anforderung bereitgestellt hat, eine Gutschrift dafür erhält, und das Brechen von Indexdateien beenden?


Ich habe versucht, die Zusammenführung mit Git Merge-Fehler zu reparieren. Aus einer Fehlermenge wird eine andere Fehlermenge ad infinitum . Ich habe auch versucht, die Problemdatei gemäß Dateien beim Zusammenführen ignorieren zurückzusetzen, wobei geplant war, die eine benötigte Zeile zu kopieren/einzufügen, aber der kaputte Index bleibt bestehen.

Dies ist zu einer völligen Zeitverschwendung geworden, und ich bin nicht mehr daran interessiert, es auf Git-Weise zu versuchen, da es so viel Zeit verschwendet. Jetzt möchte ich einfach, dass Git die Zusammenführung durchführt und keine Indexdateien mehr beschädigt.


Hier ist die Ausgabe, die beim Zusammenführen mit den Anweisungen von github erzeugt wird:

$ git pull https://github.com/droark/cryptopp.git master
From https://github.com/droark/cryptopp
 * branch            master     -> FETCH_HEAD
Auto-merging validate.h
Auto-merging validat2.cpp
Auto-merging validat1.cpp
Auto-merging test.cpp
CONFLICT (content): Merge conflict in test.cpp
Auto-merging pubkey.h
Automatic merge failed; fix conflicts and then commit the result.
16
jww

Es gibt keine Möglichkeit zum Zusammenführen, ohne Konflikte zu lösen. Woher würde git sonst wissen, was zu verschmelzen ist? Sie können jedoch die Version von jedem Zweig, den Sie zusammenführen, mit git checkout --ours <filepath> Oder git checkout --theirs <filepath> Auschecken. Hier ist ein Beispiel:

Angenommen, Sie befinden sich in der Hauptniederlassung, in der Staging-Vorgänge zusammengeführt werden:

git checkout master
git merge staging

Und Git zeigt eine Reihe von Konflikten:

...
CONFLICT: Readme.md
...

Wenn Sie die Version von Readme.md Behalten möchten, die auf master installiert ist, führen Sie Folgendes aus:

git checkout --ours Readme.md

Beachten Sie, dass sich --ours Auf "diesen" Zweig bezieht, d. H. Auf master, da Sie sich auf master befinden.

Jetzt können Sie es einfach zum Index hinzufügen, um es als gelöst zu markieren:

git add Readme.md

Dies ignoriert effektiv alle Änderungen an Readme.md Im Zweig staging.

Sie können diesen Vorgang für jede Datei wiederholen, die Sie aus der Zusammenführung ausschließen möchten. Wenn Sie fertig sind, übernehmen Sie wie gewohnt:

git commit -m "whatever..."

Um es für alle Dateien mit Konflikten zu wiederholen, können Sie dies tun

for f in $(git diff --name-only --diff-filter=U | cat); do
   echo "Resolve conflict in $f ..."
   git checkout --theirs $f
done
21
Anthony E

Es führt kein Weg an der Lösung von Konflikten vorbei. So funktioniert die Versionskontrolle (wenn Alice "a" und Bob "b" sagt, woher sollte Git wissen, welche richtig ist, es sei denn, Sie sagen?). Alles, was Sie tun können, ist direkt git, um sie selbst aufzulösen, wenn Sie auf eine von mehrere mögliche Arten , z.

git merge -s recursive -X theirs <branch>

(-s recursive Ist die Standardeinstellung, wenn es nur einen <branch> Gibt, sodass Sie diesen hier weglassen können.)

Nun, da Sie bereits einen Konflikt in Ihrem Baum haben, auch Sie

  • folgen Sie der manuelle Auflösungsroute
    • bearbeiten Sie die Datei nach Herzenslust
    • git add It (add in Git dient gleichzeitig als Markierung einer aufgelösten Datei)
    • git commit, Um die Zusammenführung abzuschließen; oder
  • stellen Sie den Status vor dem Zusammenführen mit git merge --abort wieder her und wiederholen Sie den Vorgang mit den oben genannten Optionen für die automatische Auflösung
13
ivan_pozdeev

Die Lösung eines Konflikts ist mit der Bearbeitung anderer laufender Arbeiten vergleichbar. Alle Änderungen müssen inszeniert werden (git add) und dann festgeschrieben. Dateien, die erfolgreich automatisch zusammengeführt wurden, sind bereits bereitgestellt. In Konflikt stehende Dateien gibt es nicht.

Bearbeiten Sie die in Konflikt stehenden Dateien zu Ihrer Zufriedenheit, inszenieren Sie sie (git add), und wenn das alles erledigt ist, git commit.

In Ihrem Fall speziell ...

  • Bearbeiten test.cpp, um die Konflikte zu beheben (sie haben <<<< Marker)
  • git add test.cpp
  • Führen Sie Ihre Tests durch, um sicherzustellen, dass alles in Ordnung ist.
  • git commit
4
Schwern

Schieben Sie die Entwicklung in den Master

git Push --force Origin branchA:branchB

Dadurch wird eine Zusammenführung und dann Push erzwungen

3
ShadowCore