rebase en cours. Impossible de valider. Comment procéder ou arrêter (abandonner)?

139

Quand je cours:

git status

Je vois ça:

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

Quand je fais:

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

Je vois: rebase-apply

Je ne peux pas m'engager sur l'origine.

git branch

Spectacles:

* (no branch, rebasing master)
  develop
  master

Je suis coincé. Je ne sais pas quoi faire? Le rebase prend-il vraiment autant de temps? git rebase --continuene fait rien. Je n'ai rien dans l'état git .. J'attends juste le rebase. Que puis-je faire?

UDATE: Ceci est la sortie de: 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 add. n'a rien.

Joseph Chambers
la source

Réponses:

255

Le rebase ne se produit pas en arrière-plan. "rebase en cours" signifie que vous avez commencé un rebase et que le rebase a été interrompu en raison d'un conflit. Vous devez reprendre le rebase ( git rebase --continue) ou l'abandonner ( git rebase --abort).

Comme le git rebase --continuesuggère le message d'erreur de , vous avez demandé à git d'appliquer un patch qui aboutit à un patch vide. Très probablement, cela signifie que le correctif a déjà été appliqué et que vous souhaitez le supprimer en utilisant git rebase --skip.

Matthieu Moy
la source
J'ai mis à jour le message pour inclure git rebase - continuez selon votre demande.
Joseph Chambers
2
OK, alors "il rebase - continue ne fait rien" était inexact. Vous devriez avoir écrit "git rebase --continue errors out comme suit ..." pour obtenir de l'aide.
Matthieu Moy
3
La documentation de cela très mal, elle ne cesse de répéter que vous 'git rebase --continue' et vous vous retrouverez dans une manière infinie de dire cela.
Jean-Paul
6
git rebase --skip l'a fait!
Borzh
Comme il s'agit d'une question pour les débutants relatifs (comme moi), j'ai pensé qu'il valait la peine de mentionner tout ce discours sur l'exécution de ceci ou cela - nécessite d'ouvrir un nouveau terminal et de retourner dans le repo ... rien ne fonctionnerait dans mon cas de ce problème sans faire ça,
Kdean571
10

Je suis resté coincé dans le `` statut de rebase '', j'ai

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

mais la course a git rebase --skipcédé error: could not read '.git/rebase-apply/head-name': No such file or directory.

La course a rm -fr ".git/rebase-apply"aidé.

Remarque: bien sûr, ne le faites que si vous ne vous souciez pas du rebase ou si vous êtes coincé sur un rebase précédent dont vous ne voulez plus.

yeux sauvages
la source
8
  • Étape 1: Continuez git rebase --continue

  • Étape 2: corrigez les CONFLITS puis git add .

  • Revenez à l'étape 1, maintenant si elle dit no changes ..alors exécutez git rebase --skippuis revenez à l'étape 1

  • Si vous voulez juste quitter rebase, exécutez git rebase --abort

  • Une fois que toutes les modifications sont effectuées, exécutez git commit -m "rebase complete"et vous avez terminé.

Ani Menon
la source
6

Vous avez dit à votre référentiel de rebaser. Il semble que vous étiez sur un commit (identifié par SHA 9c168a5) et que vous avez ensuite fait git rebase masterou git pull --rebase master.

Vous rebasez le maître de branche sur ce commit. Vous pouvez terminer le rebase via git rebase --abort. Cela reviendrait à l'état dans lequel vous étiez avant de commencer à rebaser.

Schleis
la source
Je ne fais jamais de git rebase/pull --rebase master. Je me retrouve souvent dans cet état ... à cause d'un conflit. Je change un fichier, fais un pull, restaure mes modifications et le nouveau patch est vide ce qui fait mal au cerveau de git qui décide alors d'entrer dans ce "mode rebase" ...
Alexis Wilke
6

Je suis entré dans cet état récemment. Après avoir résolu les conflits lors d'un rebase, j'ai validé mes modifications, plutôt que de courir git rebase --continue. Cela produit les mêmes messages que vous avez vus lorsque vous avez exécuté vos commandes git statuset git rebase --continue. J'ai résolu le problème en exécutant git rebase --abort, puis en réexécutant le rebase. On pourrait probablement aussi sauter le rebase, mais je ne savais pas dans quel état cela me laisserait.

$ 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
la source
En plus de --abort(+1), vous avez maintenant --quit( stackoverflow.com/a/41363262/6309 )
VonC
Après avoir résolu les conflits. puis appelez git commit. faites un autre travail, puis appelez à nouveau git commit. Si vous utilisez cette méthode git rebase --abort, tout le travail que vous faites après un conflit de validation sera supprimé. Alors soyez prudent
Jin
3

Si cela ne git rebase --abortfonctionne pas et que vous obtenez toujours

erreur: impossible de lire '.git / rebase-apply / head-name': aucun fichier ou répertoire de ce type

Type:

git rebase --quit
Panda-313
la source
0

Configurer mon gità autorebase sur ungit checkout

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

Sinon, il fusionne automatiquement lorsque vous passez d'une branche à l'autre, ce qui, à mon avis, est le pire choix possible par défaut.

Cependant, cela a un effet secondaire, lorsque je passe à une branche et que git cherry-pick <commit-id>je me retrouve dans cet état étrange à chaque fois qu'il y a un conflit.

En fait, je dois abandonner le rebase, mais d'abord je corrige le conflit, git add /path/to/filele fichier (une autre façon très étrange de résoudre le conflit dans ce cas?!), Puis je fais un git commit -i /path/to/file. Maintenant, je peux abandonner 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>

Le second git commit .semble provenir de l'abandon. Je corrigerai ma réponse si je découvre que je devrais abandonner le rebaseplus tôt possible.

Le --forcesur le push est requis si vous sautez d'autres commits et que les deux branches ne sont pas lisses (les deux manquent des commits de l'autre).

Alexis Wilke
la source
«Sinon, il fusionne automatiquement lorsque vous passez d'une branche à l'autre» - Euh, non. Git ne fait aucune sorte de fusion ou de rebase lorsque vous changez de branche. autosetupmergea à voir avec comment git pullest configuré pour les nouvelles branches.
Marnen Laibow-Koser
À ce moment-là, lorsque je me battais avec ce problème, il a certainement fait une sorte de fusion de divers codes. Ma configuration actuelle semble ignorer ce problème. Il y a aussi le problème de ne pas avoir fait de commit + push de votre branche actuelle avant d'essayer de basculer.
Alexis Wilke
Git vous dira si vos modifications non validées empêcheraient le changement de branche, donc il n'y a pas grand chose à craindre, n'est-ce pas? Ou parlez-vous d'autre chose?
Marnen Laibow-Koser
0

Une autre option pour ABORT / SKIP / CONTINUE à partir de l' IDE

VCS> Git> Abort Rebasing

entrez la description de l'image ici

Prabes
la source
0

La mienne était une erreur qui a surgi de BitBucket. Ran l'a git am --skipcorrigé.

Kevin Aung
la source