Zusammenführen mit erzwungenem Überschreiben in Git
Wenn wir git push
oder git merge
anwenden, kommt es meistens irgendwann zu Konflikten. In einigen Fällen ist die Lösung für Merge-Konflikte so einfach wie das Verwerfen lokaler Änderungen oder Remote- oder anderer Branch-Änderungen.
Wenn Git nicht herausfinden kann, wie zwei widersprüchliche Änderungen zusammengeführt werden sollen, erstellt es eine Konfliktanfrage. Eine Konfliktanforderung ist eine spezielle Art von Patch, der das Problem beschreibt, und er enthält beide Seiten der widersprüchlichen Änderung (unsere und ihre) und das Ergebnis des Zusammenführungsversuchs.
Während zwei Teammitglieder an denselben Dateien arbeiten und in dieser Datei ein Konflikt auftritt, wendet Git den Konflikt auf unsere Arbeitsdatei an. Wir können dann die resultierende Datei bearbeiten und Git zeichnet unsere Änderungen auf. Wenn eine widersprüchliche Änderung auftritt, markiert Git die Datei als in einem Konfliktzustand. Es gibt mehrere Befehle zum Lösen von Konflikten in diesem bestimmten Zweig.
Konflikte treten am häufigsten auf, wenn zwei oder mehr Personen an derselben Datei im selben Repository arbeiten. Wenn der Konflikt jedoch in einer Datei gefunden wird, ist Git sehr schlau und intelligent darin, das auf ziemlich großartige Weise zu lösen. Git verwendet Konfliktmarkierungen, um anzuzeigen, welche Teile der Datei in Konflikt stehen. Die Konfliktmarkierungen sind kleine Hashes, die auf beiden Seiten des widersprüchlichen Abschnitts der Datei platziert werden.
Pull wird nicht einzeln verwendet. Es wird mit Unterstützung beim Abrufen von Daten vom Remote-Server und anschließendem Zusammenführen mit den Änderungen im lokalen Repository verwendet. Diese zwei unten erwähnten Operationen können ausgeführt werden, wenn wir wollen.
git fetch
git merge origin/$CURRENT_BRANCH
Das oben erwähnte origin/$CURRENT_BRANCH
bedeutet unten.
- Git wendet Zusammenführungsoptionen an und übernimmt die Änderungen aus dem Remote-Repository, nämlich
Ursprung
. - Und das wird zu
$CURRENT_BRANCH
hinzugefügt - die derzeit nicht in unserer lokalen ausgecheckten Filiale vorhanden sind
git pull
wird nicht nur empfohlen, was nur git fetch
gefolgt von git merge
ausführt. Wir führen drei Zusammenführungen durch, durch die Git drei Abrufvorgänge ausführt, wobei ein Abruf alles ist, was wir benötigen.
git fetch origin # it will update all our origin/* remote-tracking branches
git checkout new branch
git merge origin/new branch
git checkout master
git merge origin/master
git merge -X theirs new branch
git push origin master
Die oben erwähnten Befehle würden effektiv alle Änderungen ignorieren, die auf dem Zweig, von dem wir zusammenführten, anders waren, und einen neuen Commit auf dem Zweig entwickeln, auf den wir zusammenführen, wo die Commits alle zusammengeführt werden.
Wir können auch --ours
bei einer normalen Zusammenführung verwenden, um alle Änderungen in dem Zweig zusammenzuführen, aus dem wir zusammenführen, und dann alle Dateien überspringen, die in dem Zweig existieren, zu dem wir zusammenführen, wodurch effektiv eine Drei-Wege-Zusammenführung zwischen den beiden durchgeführt wird Verzweigungen und verwenden Sie dann einfach die Dateien aus der Verzweigung, mit der Sie zusammenführen.
Wir fanden es viel einfacher, git merge --ours
zu verwenden, um die Dateien zusammenzuführen, und dann git rebase -i
zu verwenden, um die Änderungen aus dem Zweig, aus dem ich zusammengeführt habe, manuell erneut anzuwenden.
Die obigen Befehle funktionieren nicht bei Dateien mit Konflikten, aber wir haben festgestellt, dass die folgenden Befehle funktionieren, um den Konflikt zu lösen.
git checkout file_with_conflict
git merge --ours --no-commit file_from_branch_with_conflict
git reset --hard git add file_with_conflict git commit -m
Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.
LinkedIn