Ich habe den Abschnitt " Grundlegendes Verzweigen und Zusammenführen " des Git-Community-Buches gelesen .
Also folge ich ihm und erstelle einen Zweig : experimental
.
Dann habe ich:
- zum experimentellen Zweig wechseln (git checkout experimentell)
- Nehmen Sie eine Reihe von Änderungen vor
- Commit it (Git Commit -a)
- zum Hauptzweig wechseln (git checkout master)
- Nehmen Sie einige Änderungen vor und verpflichten Sie sich dort
- wieder experimentell wechseln (git checkout experimentell)
- Merge Master Wechsel zu Experimental (Git Merge Master)
Es gibt einige Konflikte, aber nachdem ich sie gelöst habe, habe ich 'git myfile' hinzugefügt.
Und jetzt stecke ich fest, ich kann nicht zurück zum Meister gehen
wenn ich es tue
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
und ich tat:
$ git rebase --abort
Keine Rebase in Bearbeitung?
und ich tat :
$ git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
Was kann ich tun, um zu meiner Hauptniederlassung zurückzukehren?
git commit gf2n.cpp -m "Hand merge gf2n.cpp due to conflicts"
führt zufatal: cannot do a partial commit during a merge.
. Und natürlich scheinen "Partial Commits" nirgendwo auf den Git-Manpages dokumentiert oder diskutiert zu werden. Das Durchführen einesgit merge
nach dem Fix führt zuPlease, commit your changes before you can merge.
Was für ein kaputtesgit merge --continue
. Siehe meine Antwort untenAntworten:
Wenn während einer Zusammenführung ein Konflikt auftritt, müssen Sie das Zusammenführungs-Commit manuell beenden. Es hört sich so an, als hätten Sie die ersten beiden Schritte ausgeführt, um die in Konflikt stehenden Dateien zu bearbeiten und sie dann auszuführen
git add
, um sie als gelöst zu markieren. Schließlich müssen Sie die Zusammenführung mit tatsächlich festschreibengit commit
. An diesem Punkt können Sie die Zweige wieder wechseln.quelle
git commit -am "your commit message"
, das Hinzufügen und Festschreiben gleichzeitig durchzuführen.git commit
funktioniert. Verwenden Sie es am besten, um die für Sie ausgefüllte Standardnachricht zum Festschreiben von Zusammenführungen zu erhalten. Ich vermeide "git commit -am", da es die Nachricht überschreibtgit push
.Mit Git 2.12 (Q1 2017) haben Sie den natürlicheren Befehl:
Siehe Commit c7d227d (15. Dezember 2016) von Jeff King (
peff
) .Siehe Commit 042e290 , Commit c261a87 , Commit 367ff69 (14. Dezember 2016) von Chris Packham (
cpackham
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 05f6e1b , 27. Dezember 2016)Siehe 2.12 Versionshinweise .
quelle
Falls Sie während einer Zusammenführung / Neuausrichtung jemals stecken bleiben, können Sie dies jederzeit tun
um Ihre Arbeit auf den Stand des letzten Commits zurückzusetzen. Dadurch gehen Ihre Änderungen aus dem Arbeitsbaum verloren. Wenn Sie also vor der Zusammenführung lokale Änderungen vorgenommen haben, werden diese danach gelöscht. Aus diesem Grund ist es ratsam, keine Zusammenführung zu starten, wenn Sie lokale Änderungen vorgenommen haben. :) :)
quelle
git reset --hard
wirft nicht festgeschriebene Änderungen weggit merge --abort
, was kein Risiko birgt, etwas zu verlieren?Gerade
git commit
so.Optional ist
git abort
es:Ich bin auf einen Zusammenführungskonflikt gestoßen. Wie kann ich die Zusammenführung abbrechen?
Installieren Sie kdiff3 und konfigurieren Sie es als Mergetool, um das Leben bei Zusammenführungen zu vereinfachen. Anleitung: http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/
Diese Seite enthält dieses Video: https://www.youtube.com/watch?v=Cc4xPp7Iuzo
quelle
Wann immer Sie zwei Zweige mit dem Befehl zusammenführen
git merge brancha branchb
, gibt es zwei Möglichkeiten:Ein Zweig (sagen wir Zweiga) kann von dem anderen Zweig (sagen wir Zweigb) erreicht werden, indem der Commit-Verlauf verfolgt wird. In diesem Fall spult git den Kopf einfach vor, um auf den letzten Zweig zu zeigen (in diesem Fall Zweigb).
2.Aber wenn die beiden Zweige an einem älteren Punkt auseinander gegangen sind, erstellt git einen neuen Snapshot und fügt ein neues Commit hinzu, das darauf verweist. Falls also kein Konflikt zwischen den Zweigen besteht, die Sie zusammenführen, erstellt git reibungslos ein neues Commit.
Kommen wir nun zu dem interessanten Fall zurück, in dem es Zusammenführungskonflikte zwischen den zusammengeführten Zweigen gibt. Ich zitiere dies von der Seite https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
Wenn es also Zusammenführungskonflikte gibt, müssen Sie den Konflikt lösen, dann die Änderungen, die Sie vorgenommen haben, zum Staging-Bereich hinzufügen und die Änderungen
git add filename
dann mithilfe des Befehlsgit commit
festschreiben, der aufgrund des Konflikts von git angehalten wurde. Ich hoffe, dies erklärt Ihre Abfrage. Besuchen Sie auch den obigen Link für ein detailliertes Verständnis. Bei Fragen bitte unten kommentieren, ich helfe Ihnen gerne weiter.quelle
Die nächsten Schritte nach der manuellen Lösung der Konflikte sind:
git merge --continue
,git cherry-pick --continue
,git rebase --continue
]quelle
error: Failed to merge in the changes. Patch failed at 0001 ADD: _type to styleguide The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".
git merge --continue
, was ich versuche zu tun, führt zuerror: unknown option 'continue'
. Ich bin mir ziemlich sicher, dass Ihre Antwort falsch ist, da diegit-merge
Manpage sie nicht auflistet. Welche Version von Git verwenden Sie? Ich benutzegit version 1.8.5.2 (Apple Git-48)
. Ich habe es auch mit MacPorts versuchtgit version 2.9.3
.git commit
Ein Zusammenführungskonflikt tritt auf, wenn zwei Zweige, die Sie zusammenführen möchten, denselben Teil derselben Datei geändert haben. Sie können eine Liste von Konflikten mit erstellen
git status
.Wenn die in Konflikt stehende Zeile auftritt, bearbeitet Git den Inhalt der betroffenen Dateien mit visuellen Indikatoren, die beide Seiten des in Konflikt stehenden Inhalts markieren.
Wenn Sie Ihre in Konflikt stehenden Dateien repariert haben und zum Zusammenführen bereit sind, müssen Sie nur noch ausführen
git add
undgit commit
das Zusammenführungs-Commit generieren. Sobald das Commit durchgeführt wurde, werdengit push
die Änderungen an der Verzweigung vorgenommen.Referenzartikel: Git Merge .
quelle
Nachdem alle Dateien hinzugefügt wurden, ist der nächste Schritt ein " Git Commit" ".
"git status" schlägt vor, was zu tun ist: Dateien, die noch hinzugefügt werden müssen, werden unten aufgelistet. Wenn alle abgeschlossen sind, wird oben ein Commit vorgeschlagen, in dem der Zusammenführungsstatus des aktuellen Zweigs erläutert wird.
quelle
Als erstes möchte ich klarstellen, dass Zweigstellennamen nur ein Alias für ein bestimmtes Commit sind. Ein Commit ist das, was Git funktioniert, wenn Sie ziehen, Merge drücken und so weiter. Jedes Commit hat eine eindeutige ID.
Wenn Sie $ git zusammenführen, geschieht tatsächlich, dass git versucht, Ihren aktuellen Zweig schnell zu dem Commit vorzuspulen, auf dem sich der Zweig befindet (mit anderen Worten, beide Filialnamen verweisen auf dasselbe Commit). Dieses Szenario ist für git am einfachsten zu behandeln, da es kein neues Commit gibt. Stellen Sie sich vor, der Meister springt auf den Lilipad, auf dem sich Ihr Zweig abkühlt. Es ist möglich, das Flag --no-ff zu setzen. In diesem Fall erstellt git ein neues Commit, unabhängig davon, ob Codekonflikte aufgetreten sind.
In einer Situation, in der Codekonflikte zwischen den beiden Zweigen bestehen, die Sie zusammenführen möchten (normalerweise zwei Zweige, deren Festschreibungsverlauf in der Vergangenheit ein gemeinsames Festschreiben aufweist), funktioniert der schnelle Vorlauf nicht. git kann die Dateien möglicherweise weiterhin automatisch zusammenführen, solange dieselbe Zeile nicht von beiden Zweigen in einer widersprüchlichen Datei geändert wurde. In diesem Fall führt git die in Konflikt stehenden Dateien für Sie zusammen UND schreibt sie automatisch fest. Sie können eine Vorschau der Arbeit von git anzeigen, indem Sie $ git diff --cached ausführen. Oder Sie können das Flag --no-commit an den Befehl merge übergeben, wodurch geänderte Dateien in Ihrem Index verbleiben, die Sie hinzufügen und festschreiben müssen. Sie können diese Dateien jedoch unterscheiden, um zu überprüfen, wie sich die Zusammenführung ändert.
Das dritte Szenario ist, wenn es Konflikte gibt, die Git nicht automatisch lösen kann. In diesem Fall müssen Sie sie manuell zusammenführen. Meiner Meinung nach ist dies am einfachsten mit einer Zusammenführung wie Araxis Merge oder p4merge (kostenlos) zu tun. In jedem Fall müssen Sie jede Datei einzeln ausführen. Wenn die Zusammenführung jemals hängen bleibt, verwenden Sie $ git merge --continue, um sie voranzutreiben. Git sollte dir sagen, ob es nicht weitergehen kann und wenn ja, warum nicht. Wenn Sie das Gefühl haben, dass Sie die Zusammenführung irgendwann verloren haben, können Sie $ git merge --abort ausführen. Jede Zusammenführung wird rückgängig gemacht und Sie können von vorne beginnen. Wenn Sie fertig sind, ist jede Datei, die Sie zusammengeführt haben, eine geänderte Datei, die hinzugefügt und festgeschrieben werden muss. Sie können überprüfen, wo sich die Dateien mit dem Status $ git befinden. Wenn Sie die zusammengeführten Dateien noch nicht festgeschrieben haben. Sie müssen dies tun, um die Zusammenführung abzuschließen.
quelle
Es kann spät sein. Es ist passiert, weil dein Git HEAD nicht aktualisiert wird. Dieses Lob würde das lösen
git reset HEAD
.quelle