Zusammenführen mit erzwungenem Überschreiben in Git

Abdul Jabbar 6 Februar 2022
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 Jabbar avatar Abdul Jabbar avatar

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

Verwandter Artikel - Git Merge