Was derzeit passiert, ist, dass Sie über einen bestimmten Satz von Dateien verfügen, die Sie zuvor zusammengeführt haben, die jedoch Zusammenführungskonflikte ausgelöst haben. Wenn ein Zusammenführungskonflikt auftritt, sollte er diese im Idealfall manuell lösen und die Änderungen mithilfe von festschreiben git add file.name && git commit -m "removed merge conflicts"
. Jetzt hat ein anderer Benutzer die fraglichen Dateien in seinem Repository aktualisiert und seine Änderungen auf das gemeinsame Upstream-Repo übertragen.
Es kommt also vor, dass Ihre Zusammenführungskonflikte aus (wahrscheinlich) dem letzten Commit nicht gelöst wurden, sodass Ihre Dateien nicht in Ordnung zusammengeführt werden und daher das Flag U
( unmerged
) für die Dateien. Wenn Sie also a git pull
ausführen, gibt git den Fehler aus, da Sie eine Version der Datei haben, die nicht korrekt behoben wurde.
Um dies zu beheben, müssen Sie die fraglichen Zusammenführungskonflikte lösen und die Änderungen hinzufügen und festschreiben, bevor Sie eine ausführen können git pull
.
Beispielreproduktion und Lösung des Problems:
# Note: commands below in format `CUURENT_WORKING_DIRECTORY $ command params`
Desktop $ cd test
Lassen Sie uns zunächst die Repository-Struktur erstellen
test $ mkdir repo && cd repo && git init && touch file && git add file && git commit -m "msg"
repo $ cd .. && git clone repo repo_clone && cd repo_clone
repo_clone $ echo "text2" >> file && git add file && git commit -m "msg" && cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
Jetzt sind wir in repo_clone und wenn Sie a tun git pull
, wird es Konflikte auslösen
repo_clone $ git pull origin master
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/anshulgoyal/Desktop/test/test/repo
* branch master -> FETCH_HEAD
24d5b2e..1a1aa70 master -> origin/master
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
Wenn wir die Konflikte im Klon ignorieren und jetzt mehr Commits im ursprünglichen Repo vornehmen,
repo_clone $ cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
Und dann machen wir ein git pull
, wir bekommen
repo_clone $ git pull
U file
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
Beachten Sie, dass sich das file
Jetzt in einem nicht zusammengeführten Zustand befindet. Wenn wir a ausführen git status
, können wir dasselbe deutlich sehen:
repo_clone $ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
(use "git pull" to merge the remote branch into yours)
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: file
Um dies zu lösen, müssen wir zuerst den Zusammenführungskonflikt lösen, den wir zuvor ignoriert haben
repo_clone $ vi file
und setzen Sie seinen Inhalt auf
text2
text1
text1
und fügen Sie es dann hinzu und übernehmen Sie die Änderungen
repo_clone $ git add file && git commit -m "resolved merge conflicts"
[master 39c3ba1] resolved merge conflicts