714 Stimmen

Wie löst man einen Git Stash-Konflikt ohne Commit?

Als in dieser Frage gefragt Ich möchte auch wissen, wie man einen Konflikt auflöst git stash pop ohne alle Änderungen zu einem Commit hinzuzufügen (so wie es "git stash pop" ohne Konflikt tut).

Mein derzeitiger Ansatz ist sehr uncool, weil ich es auf diese Weise mache:

git stash pop  # -> CONFLICT
git stash drop
# [resolve conflict]
# [add conflict files]
git reset HEAD # <all files that are in commit-mode>

Wie man sich fortpflanzt:

mkdir foo; cd foo; git init
echo "1" > one
echo "2" > two
git add -A; git commit -m "first"
echo "1.1" > one
echo "2.1" > two
git stash
echo "2.2" > two
git commit -a -m "second"
echo "Only this file would stay in HEAD without the conflict" > third
git add third
git stash pop
git status

2016-06-27: Dem Beispiel wurde eine neue Datei namens 'third' hinzugefügt, um zu zeigen, dass Workarounds wie die Lösung von scy nur für leere HEADs funktionieren, aber nicht das ursprüngliche Problem beheben, dass der HEAD nicht denselben Inhalt hat wie bei einem git stash pop ohne einen Konflikt.

11voto

jacmkno Punkte 1069

Das ist kein Problem. Eine einfache git reset HEAD ist das, wonach Sie suchen, denn es lässt Ihre Dateien genau wie eine nicht konfliktbehaftete git stash pop .

Das einzige Problem ist, dass die Dateien, die in Konflikt stehen, immer noch die Konflikt-Tags haben und Git sie nicht mehr mit dem Flag "both_modified" als in Konflikt stehend meldet, was sehr nützlich ist.

Um dies zu verhindern, lösen Sie die Konflikte auf (bearbeiten und korrigieren Sie die widersprüchlichen Dateien), bevor Sie git reset HEAD und schon kann es losgehen...

Am Ende dieses Prozesses verbleibt Ihr Vorrat in der Warteschlange, so dass Sie einfach eine git stash drop um das zu klären.

Das ist mir gerade passiert und ich habe diese Frage gegoogelt, also wurde die Lösung getestet.

Ich denke, sauberer geht's nicht...

6voto

Marco Ponti Punkte 2279

Es scheint, dass dies die Antwort sein könnte, nach der Sie suchen. Ich habe es persönlich noch nicht ausprobiert, aber es scheint, als könnte es den Zweck erfüllen. Mit diesem Befehl wird GIT versuchen, die Änderungen so zu übernehmen, wie sie vorher waren, ohne zu versuchen, alle Änderungen für die Übertragung hinzuzufügen.

git stash apply --index

Hier ist die vollständige Erklärung:

http://git-scm.com/book/en/Git-Tools-Stashing

4voto

Jammer Punkte 512

Der schnellste Weg, den ich gefunden habe, ist, den Konflikt zu lösen und dann git add -u und tun dann git reset HEAD die nicht einmal einen Commit beinhaltet.

2voto

cherish Punkte 1240

git stash branch funktioniert, das einen neuen Zweig für Sie erstellt, die den Commit, auf dem Sie waren, als Sie Ihre Arbeit versteckt haben, und wendet Ihre Arbeit dort wieder an lässt dann den Stash fallen, wenn er erfolgreich angewendet wurde. check ce

2voto

Erik Zivkovic Punkte 3864

Antwort für Leute, die Probleme haben mit git stash -u nicht saubere Anwendung

Was ist, wenn Sie einen Vorrat angelegt haben mit git stash -u ? Dann sind die meisten Antworten auf diese Frage ungültig! Denn sobald Sie den Ratschlag aus der höchstrangigen Antwort befolgen (diese: https://stackoverflow.com/a/27382210/816017 ) - d.h. mit git stash drop (mein Rat: Tun Sie es nicht ) sind Ihre nicht bereitgestellten Dateien verschwunden.

Das war eine langatmige Einleitung, um das Folgende zu sagen:

Wenn Sie Probleme mit einer Merge conflict wenn Sie git stash pop , und Sie haben git stash -u dann ist eine Möglichkeit, sich aus dieser Situation zu befreien, die folgende:

  • git stash branch my-stash-branch
  • Tun Sie alles, was nötig ist, um den Fehler zu beheben.
    • Harte Diffs: Kopieren Sie die beanstandeten Dateien manuell in einen Nicht-Git-Ordner, und führen Sie dann git restore myfile und wenden Sie die Änderungen dann manuell an
    • Einfache Diffs: Wenn sich der Konflikt nur in einer Wegwerfdatei wie Cargo.lock o yarn.lock nur git restore Cargo.lock .
  • Do git stash -u wieder
  • git checkout my-actual-branch
  • git stash pop die sich jetzt sauber auftragen lassen sollte, ansonsten ausspülen & wiederholen
  • Entfernen Sie die my-stash-branch sobald Sie sicher sind, dass Ihre Änderungen korrekt übernommen wurden.

Kurz gesagt: die Antwort, die behauptet "Verfolgen Sie keine anderen Antworten..." in großer, fetter Schrift, ist nicht für jeden die richtige Antwort! Vor allem nicht, wenn Sie git stash -u . Ihre Änderungen können verloren gehen!

Fußnoten:

  • Nicht bereitgestellte Dateien, die verloren gegangen sind durch git stash drop können wahrscheinlich gefunden werden, wenn Sie sich durch git fsck - sie sind nicht in der reflog wenn ich mich nicht irre.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X