Heim > Entwicklungswerkzeuge > Idiot > So lösen Sie Zusammenführungskonflikte in Git

So lösen Sie Zusammenführungskonflikte in Git

WBOY
Freigeben: 2022-06-24 15:18:43
Original
33694 Leute haben es durchsucht

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.

So lösen Sie Zusammenführungskonflikte in Git

Die Betriebsumgebung dieses Artikels: Windows 10-System, Git-Version 2.30.0, Dell G3-Computer.

Wie löst Git Zusammenführungskonflikte?

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ösung

Bearbeiten 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

1.1, Stammzweigcode

Es gibt zwei Dateien im Trunk-Zweig

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;
}
Nach dem Login kopieren

README md

this is master branch
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

1.3, Jack hat den Code geändert. Senden Sie die Zusammenführung.

Jack hat die folgenden Änderungen am Code vorgenommen.

main.cpp beim Drücken

this is AAA branch
Nach dem Login kopieren

2. Den Konflikt lösen

Der nächste Schritt ist Wie man den Konflikt löst

                                                                                                                                           gemeinsam überwiegen den Konflikt.

Ö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 &#39;A&#39; 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)
$
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Ebenso können Sie Konflikte für README.md manuell lösen.

this is BBB branch
Nach dem Login kopieren

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 &#39;B&#39; 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)
$
Nach dem Login kopieren

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)
$
Nach dem Login kopieren

An diesem Punkt ist der Konflikt erfolgreich gelöst

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.
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
git
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage