So lösen Sie Zusammenführungskonflikte mit Git: 1. Bearbeiten Sie die in Konflikt stehenden Dateien, löschen Sie die Sonderzeichen in den Dateien und ändern Sie den Code nach Bedarf. 2. Fügen Sie die angegebenen Dateien zum Staging-Bereich hinzu und senden Sie die angegebenen Zweige an den Trunk. Führen Sie einfach den Befehl „git commit“ aus. Wenn Sie einen Dateinamen hinzufügen, wird ein Fehler gemeldet.
Die Betriebsumgebung dieses Artikels: Windows 10-System, Git-Version 2.30.0, Dell G3-Computer.
Git-Konflikte
Wenn mehrere Zweigcodes in einem Zweig zusammengeführt werden, wird dieselbe Datei in den beiden Zweigen geändert, unabhängig davon, wo die Änderung vorgenommen wird
Es gibt auch eine Art von zwei. Tritt auf, wenn der Name derselben Datei in zwei Zweigen geändert wird.
Ursache
Beim Zusammenführen von Zweigen weisen die beiden Zweige zwei völlig unterschiedliche Änderungssätze in derselben Datei auf. Git kann nicht für uns entscheiden, welches wir verwenden sollen. Über den Inhalt des neuen Codes muss manuell entschieden werden.
LösungBearbeiten Sie die in Konflikt stehende Datei, löschen Sie die Sonderzeichen und entscheiden Sie, welcher Inhalt verwendet werden soll.
Fügen Sie ihn zum Staging-Bereich hinzu.
Führen Sie den Commit aus (Hinweis: Sie können den Befehl „git commit“ nicht mit einem Dateinamen verwenden Zu diesem Zeitpunkt wird ein Fehler für den Dateinamen gemeldet und die Zusammenführung verschwindet nach erfolgreicher Übermittlung.
Beispiele sind wie folgt:
1. Auftreten eines Konflikts
main.cpp
#include <stdio.h> #include <string.h> int main() { char data[100] = "my branch name is master"; int length = strlen(data); for(int i = 0; i < length; i++) { printf("%c", data[i]); } printf("branch master\n"); return 0; }
README md
this is master branch
Zu diesem Zeitpunkt haben Tom und Jack jeweils den Code des Trunk-Zweigs abgerufen und Änderungen vorgenommen.
1.2, Tom hat den Code geändert und zur Zusammenführung übermittelt. Tom hat Zweig A erstellt und die folgenden Änderungen an der Datei vorgenommen
#include <stdio.h> #include <string.h> int main() { char data[100] = "my branch name is A"; int length = strlen(data); for(int i = 0; i < length; i++) { printf("%c", data[i]); } printf("branch AAA\n"); return 0; }
Jack hat die folgenden Änderungen am Code vorgenommen.
main.cpp beim Drücken
this is AAA branch
2. Den Konflikt lösen
Der nächste Schritt ist Wie man den Konflikt löst
Öffnen Sie die Datei main.cpp direkt. Sie können die folgenden Sonderzeichen sehen, die uns sagen, welche Codezeile einen Konflikt verursacht.
lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (A) $ git add . lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (A) $ git commit -m "A分支代码提交" [A ccb2626] A分支代码提交 2 files changed, 3 insertions(+), 3 deletions(-) lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (A) $ git push origin A Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 12 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (4/4), 376 bytes | 376.00 KiB/s, done. Total 4 (delta 1), reused 3 (delta 1), pack-reused 0 remote: Powered by GITEE.COM [GNK-6.2] remote: Create a pull request for 'A' on Gitee by visiting: remote: https://gitee.com/lingpe/kaol/pull/new/lingpe:A...lingpe:master To https://gitee.com/lingpe/kaol.git * [new branch] A -> A lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (A) $ git checkout master Switched to branch 'master' Your branch is up to date with 'origin/master'. lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (master) $ git merge A Updating 40c0115..ccb2626 Fast-forward README.md | 2 +- main.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (master) $ git push origin master Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 remote: Powered by GITEE.COM [GNK-6.2] To https://gitee.com/lingpe/kaol.git 40c0115..ccb2626 master -> master lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/tom/kaol (master) $
Lösen Sie Konflikte manuell direkt in der Datei. Entfernen Sie Sonderzeichen aus der Datei und ändern Sie den Code nach Bedarf.
#include <stdio.h> #include <string.h> int main() { char data[100] = "my branch name is B"; int length = strlen(data); for(int i = 0; i < length; i++) { printf("%c", data[i]); } printf("branch BBB\n"); return 0; }
Ebenso können Sie Konflikte für README.md manuell lösen.
this is BBB branch
Nachdem Sie den Konflikt gelöst haben, senden Sie ihn an den B-Zweig
lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B) $ git add . lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B) $ git commit -m "B分支代码提交" [B bdcbe03] B分支代码提交 2 files changed, 3 insertions(+), 3 deletions(-) lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B) $ git push origin B Enumerating objects: 53, done. Counting objects: 100% (53/53), done. Delta compression using up to 12 threads Compressing objects: 100% (34/34), done. Writing objects: 100% (50/50), 4.66 KiB | 2.33 MiB/s, done. Total 50 (delta 16), reused 43 (delta 12), pack-reused 0 remote: Powered by GITEE.COM [GNK-6.2] remote: Create a pull request for 'B' on Gitee by visiting: remote: https://gitee.com/lingpe/kaol/pull/new/lingpe:B...lingpe:master To https://gitee.com/lingpe/kaol.git * [new branch] B -> B lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B) $ git checkout master Switched to branch 'master' Your branch is up to date with 'origin/master'. lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (master) $ git merge B Updating 40c0115..bdcbe03 Fast-forward README.md | 2 +- main.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (master) $
Fügen Sie schließlich den B-Zweig in den Stamm ein, und es wird keine Konflikte mehr geben
lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (master) $ git push origin master To https://gitee.com/lingpe/kaol.git ! [rejected] master -> master (fetch first) error: failed to push some refs to 'https://gitee.com/lingpe/kaol.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (master) $
Sie können einen nehmen Schauen Sie sich den Code des Stammzweigs an
main.cpp
lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/jack/kaol (B) $ git pull origin master remote: Enumerating objects: 7, done. remote: Counting objects: 100% (7/7), done. remote: Compressing objects: 100% (3/3), done. remote: Total 4 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (4/4), 356 bytes | 178.00 KiB/s, done. From https://gitee.com/lingpe/kaol * branch master -> FETCH_HEAD 40c0115..ccb2626 master -> origin/master Auto-merging main.cpp CONFLICT (content): Merge conflict in main.cpp Auto-merging README.md CONFLICT (content): Merge conflict in README.md Automatic merge failed; fix conflicts and then commit the result.
README.md
#include <stdio.h> #include <string.h> int main() { <<<<<<< HEAD char data[100] = "my branch name is B"; ======= char data[100] = "my branch name is A"; >>>>>>> ccb26269f42245dfcbedfbf2218419c5ab7f2787 int length = strlen(data); for(int i = 0; i < length; i++) { printf("%c", data[i]); } <<<<<<< HEAD printf("branch BBB\n"); ======= printf("branch AAA\n"); >>>>>>> ccb26269f42245dfcbedfbf2218419c5ab7f2787 return 0; }
OK
Empfohlenes Lernen: „
Git Tutorial“
Das obige ist der detaillierte Inhalt vonSo lösen Sie Zusammenführungskonflikte in Git. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!