Rebase in Bearbeitung. Kann nicht festschreiben. Wie verfahren oder stoppen (abbrechen)?

138

Wenn ich renne:

git status

Ich sehe es:

rebase in progress; onto 9c168a5
You are currently rebasing branch 'master' on '9c168a5'.
(all conflicts fixed: run "git rebase --continue")
nothing to commit, working directory clean

Wenn ich es tue:

ls `git rev-parse --git-dir` | grep rebase || echo no rebase

Ich sehe: Rebase-Apply

Ich kann mich nicht auf die Herkunft festlegen.

git branch

Zeigt an:

* (no branch, rebasing master)
  develop
  master

Ich stecke fest. Ich weiß nicht was ich tun soll? Dauert die Wiederherstellung wirklich so lange? git rebase --continuemacht nichts Ich habe nichts im Git-Status. Ich warte nur auf die Rebase. Was kann ich tun?

UDATE: Dies ist die Ausgabe von: git rebase --continue

Applying: no message
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this 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 hinzufügen. hat nichts.

Joseph Chambers
quelle

Antworten:

254

Rebase findet nicht im Hintergrund statt. "Rebase in Bearbeitung" bedeutet, dass Sie eine Rebase gestartet haben und die Rebase aufgrund eines Konflikts unterbrochen wurde. Sie müssen die Rebase ( git rebase --continue) fortsetzen oder abbrechen ( git rebase --abort).

Wie aus der Fehlermeldung von hervorgeht git rebase --continue, haben Sie git gebeten, einen Patch anzuwenden, der zu einem leeren Patch führt. Dies bedeutet höchstwahrscheinlich, dass der Patch bereits angewendet wurde und Sie ihn mit löschen möchten git rebase --skip.

Matthieu Moy
quelle
Ich habe den Beitrag aktualisiert, um git rebase --continue gemäß Ihrer Anfrage einzuschließen.
Joseph Chambers
2
OK, dann war "es Rebase - weiter macht nichts" ungenau. Sie sollten "git rebase - weiterhin Fehler wie folgt ausgeben ..." geschrieben haben, um Hilfe zu erhalten.
Matthieu Moy
3
Die Dokumentation dieses sehr schlechten, es wiederholt sich immer wieder, dass Sie "git rebase --continue" und Sie werden in einer unendlichen Art und Weise das sagen.
Jean-Paul
6
git rebase --skip hat es geschafft!
Borzh
Da dies eine Frage für relative Anfänger (wie mich) ist, hielt ich es für erwähnenswert, all dieses Gerede über das Ausführen dieses oder jenes zu erwähnen - erfordert das Öffnen eines neuen Terminals und das Zurückkehren zum Repo ... ohne würde in meiner Instanz dieses Problems nichts laufen dabei
Kdean571
10

Ich steckte im 'Rebase-Status' fest

On branch master
Your branch is up to date with 'origin/master'.

You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working tree clean

aber das Laufen git rebase --skipgab nach error: could not read '.git/rebase-apply/head-name': No such file or directory.

Laufen hat rm -fr ".git/rebase-apply"geholfen.

Hinweis: Tun Sie dies natürlich nur, wenn Sie sich nicht für die Rebase interessieren oder wenn Sie an einer vorherigen Rebase festhalten, die Sie nicht mehr möchten.

wilde Augen
quelle
8
  • Schritt 1: Mach weiter git rebase --continue

  • Schritt 2: Beheben Sie dann die Konflikte git add .

  • Zurück zu Schritt 1. Wenn jetzt " no changes ..Ausführen" git rebase --skipangezeigt wird, kehren Sie zu Schritt 1 zurück

  • Wenn Sie nur den Rebase-Lauf beenden möchten git rebase --abort

  • Sobald alle Änderungen abgeschlossen sind, führen git commit -m "rebase complete"Sie und Sie sind fertig.

Ani Menon
quelle
6

Sie haben Ihrem Repository gesagt, dass es neu aufbauen soll. Es sieht so aus, als ob Sie sich auf einem Commit befanden (identifiziert durch SHA 9c168a5) und dann git rebase masteroder git pull --rebase master.

Sie setzen den Zweigstellenmaster erneut auf dieses Commit. Sie können die Rebase über beenden git rebase --abort. Dies würde den Zustand wiederherstellen, in dem Sie sich befanden, bevor Sie mit der Neugründung begannen.

Schleis
quelle
Ich mache nie eine git rebase/pull --rebase master. Ich lande oft in diesem Zustand ... wegen eines Konflikts. Ich ändere eine Datei, ziehe, stelle meine Änderungen wieder her und der neue Patch ist leer, was Git's Gehirn verletzt, das dann beschließt, in diesen "Rebase-Modus" zu wechseln ...
Alexis Wilke
6

Ich bin vor kurzem in diesen Zustand gekommen. Nachdem ich Konflikte während einer Rebase gelöst hatte, habe ich meine Änderungen festgeschrieben, anstatt sie auszuführen git rebase --continue. Dies ergibt die gleichen Meldungen, die Sie beim Ausführen Ihrer Befehle git statusund gesehen haben git rebase --continue. Ich habe das Problem behoben, indem ich git rebase --abortdie Rebase ausgeführt und dann erneut ausgeführt habe. Man könnte wahrscheinlich auch die Rebase überspringen, aber ich war mir nicht sicher, in welchem ​​Zustand mich das zurücklassen würde.

$ git rebase --continue
Applying: <commit message>
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this 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 status
rebase in progress; onto 4df0775
You are currently rebasing branch '<local-branch-name>' on '4df0775'.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working directory clean
jsears
quelle
Zusätzlich zu --abort(+1) haben Sie jetzt --quit( stackoverflow.com/a/41363262/6309 )
VonC
Nach der Behebung der Konflikte. Rufen Sie dann git commit auf. mache einen anderen Job und rufe dann git commit erneut auf. Wenn Sie diese Methode verwenden, git rebase --abort, wird die gesamte Arbeit, die Sie nach dem Festschreibungskonflikt ausführen, weggewünscht. Also sei vorsichtig
Jin
3

Wenn git rebase --abortnicht funktioniert und Sie immer noch bekommen

Fehler: '.git / rebase-apply / head-name' konnte nicht gelesen werden: Keine solche Datei oder kein solches Verzeichnis

Art:

git rebase --quit
Panda-313
quelle
0

Ich mein Setup autorebase auf einemgitgit checkout

# in my ~/.gitconfig file
[branch]
    autosetupmerge = always
    autosetuprebase = always

Andernfalls wird es automatisch zusammengeführt, wenn Sie zwischen Zweigen wechseln. Dies ist meiner Meinung nach die schlechteste Wahl als Standard.

Dies hat jedoch einen Nebeneffekt, wenn ich zu einem Zweig wechsle und dann jedes Mal , wenn ein Konflikt auftrittgit cherry-pick <commit-id> , in diesem seltsamen Zustand lande .

Ich muss das tatsächlich abbrechen rebase, aber zuerst behebe ich den Konflikt, git add /path/to/filedie Datei (eine andere sehr seltsame Art, den Konflikt in diesem Fall zu lösen?!), Dann mache ich a git commit -i /path/to/file. Jetzt kann ich abbrechen rebase:

git checkout <other-branch>
git cherry-pick <commit-id>
...edit-conflict(s)...
git add path/to/file
git commit -i path/to/file
git rebase --abort
git commit .
git push --force origin <other-branch>

Der zweite git commit .scheint aus dem Abbruch zu kommen. Ich werde meine Antwort korrigieren, wenn ich herausfinde, dass ich rebasefrüher abbrechen sollte .

Das --forceEinschalten ist erforderlich, wenn Sie andere Commits überspringen und beide Zweige nicht glatt sind (beiden fehlen Commits vom anderen).

Alexis Wilke
quelle
"Andernfalls wird es automatisch zusammengeführt, wenn Sie zwischen Zweigen wechseln" - Ähm, nein. Git führt keine Zusammenführung oder Neubasis durch, wenn Sie die Zweige wechseln. autosetupmergehat damit zu tun, wie git pullfür neue Zweige konfiguriert wird.
Marnen Laibow-Koser
Zu dieser Zeit, als ich mit diesem Problem kämpfte, führte es sicher zu einer Art Zusammenführung verschiedener Codes. Mein aktuelles Setup scheint dieses Problem zu überspringen. Es besteht auch das Problem, dass Sie vor dem Wechsel keinen Commit + Push für Ihren aktuellen Zweig durchgeführt haben.
Alexis Wilke
Git wird Ihnen sagen, ob Ihre nicht festgeschriebenen Änderungen das Wechseln der Zweige verhindern würden. Es gibt also nicht viel zu befürchten, oder? Oder redest du über etwas anderes?
Marnen Laibow-Koser
0

Eine weitere Option zum Abbrechen / Überspringen / Fortsetzen von IDE

VCS> Git> Rebasing abbrechen

Geben Sie hier die Bildbeschreibung ein

Prabs
quelle
0

Meins war ein Fehler, der von BitBucket aufgetaucht ist. Ran hat git am --skipes repariert .

Kevin Aung
quelle