Git Merge Fehler

264

Ich habe einen Git-Zweig 9-sign-in-outmit perfekt funktionierendem Code und möchte ihn in den Master verwandeln. Ich bin derzeit in der Hauptniederlassung.

$ git branch
9-sign-in-out
* master

Ich versuche, zum 9-sign-in-outZweig zu wechseln , aber ich kann nicht:

$ git checkout 9-sign-in-out
app/helpers/application_helper.rb: needs merge
config/routes.rb: needs merge
error: you need to resolve your current index first

Irgendeine Idee, wie ich alle Master-Zweigfehler ignorieren und den 9-sign-in-outZweig in den Master verwandeln kann ? Vielleicht Git Rebase ? Aber ich möchte den Code in der 9-sign-in-outVerzweigung nicht verlieren .

Sayanee
quelle
Meinen Sie damit, dass Sie Ihren nicht angepassten Code beim 9-Sign-In-Out nicht verlieren möchten?
Mauvis Ledford
@Mauvis: Ich habe meine Codes bereits in der Zweigstelle 9-Abmelden festgeschrieben.
Sayanee

Antworten:

530

Es lohnt sich zu verstehen, was diese Fehlermeldungen bedeuten - needs mergeund error: you need to resolve your current index firstanzuzeigen, dass eine Zusammenführung fehlgeschlagen ist und dass diese Dateien Konflikte enthalten. Wenn Sie entschieden haben, dass die Zusammenführung, die Sie versucht haben, doch eine schlechte Idee war, können Sie die Dinge wieder normalisieren mit:

git reset --merge

Andernfalls sollten Sie diese Zusammenführungskonflikte lösen, wie im Git-Handbuch beschrieben .


Sobald Sie sich mit beiden Techniken darum gekümmert haben, sollten Sie in der Lage sein, den 9-sign-in-outZweig auszuchecken . Das Problem beim einfachen Umbenennen von 9-sign-in-outin master, wie in der Antwort von wRAR vorgeschlagen , besteht darin, dass, wenn Sie Ihren vorherigen Hauptzweig mit jemandem geteilt haben, dies zu Problemen für ihn führt, da Sie, wenn der Verlauf der beiden Zweige divergiert, neu geschrieben veröffentlichen Geschichte.

Im Grunde tun , was Sie wollen, ist Ihr Thema Zweig verschmelzen 9-sign-in-outin masteraber genau die Versionen der Dateien im Thema Zweig zu halten. Sie können dies mit den folgenden Schritten tun:

# Switch to the topic branch:
git checkout 9-sign-in-out

# Create a merge commit, which looks as if it's merging in from master, but is
# actually discarding everything from the master branch and keeping everything
# from 9-sign-in-out:
git merge -s ours master

# Switch back to the master branch:
git checkout master

# Merge the topic branch into master - this should now be a fast-forward
# that leaves you with master exactly as 9-sign-in-out was:
git merge 9-sign-in-out
Mark Longair
quelle
1
Mark, ich habe endlich verstanden, was du gesagt hast, nachdem ich wieder den Fehler bekommen habe, jetzt zusammenzuführen. Ich habe jedoch diesen Fehler ::::::::::::: Sayanee: twitter sweska $ git checkout master error: Ihre lokalen Änderungen an den folgenden Dateien würden durch checkout überschrieben: webrat.log Bitte, Commit Ihre Änderungen oder verstauen Sie sie, bevor Sie die Zweige wechseln können. Abbruch ::::::::::::::::: auf irgendeine Weise, um das webrat.log in der Verzweigung zu verwenden und es mit dem Master zusammenzuführen?
Sayanee
1
@ Sayanee: Das ist ein anderer Fehler, der sich aus verschiedenen Umständen ergibt, und es wäre besser, eine neue Frage dazu zu stellen, wenn Sie davon verwirrt sind. (Kurz gesagt, Git hindert Sie daran, die Filialen zu wechseln, da dies nicht festgeschriebene Änderungen überschreiben würde webrat.log.)
Mark Longair
Früher habe ich nur die ganze Sache gemacht und mich zurückgezogen. Aber das ist schöner.
Sudo
43
git checkout -f 9-sign-in-out # change branch, discarding all local modifications
git branch -M master # rename the current branch to master, discarding current master
wRAR
quelle
3
Ich denke, es ist viel sauberer, die Zusammenführung zurückzusetzen, wie Mark unten vorgeschlagen hat, anstatt das Auschecken zu erzwingen.
Thomas
8

wie vorgeschlagen in git status,

Unmerged paths:                                                                                                                                
(use "git add <file>..." to mark resolution)                                                                                                 

    both modified:   a.jl                                  
    both modified:   b.jl

Ich habe git adddie Zusammenführung beendet und git checkoutfunktioniert dann einwandfrei.

Jingpeng Wu
quelle
1

Mein Problem war (Master | REBASE 1/1)

Dieser Befehl hat bei mir funktioniert

 git rebase --skip
Muhammad Shoaib Murtaza
quelle
-6

git commit -m "Zusammengeführter Master hat einen Konflikt behoben."

Parasp2008
quelle