web-dev-qa-db-fra.com

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

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 à l'origine.

git branch

Montre:

* (no branch, rebasing master)
  develop
  master

Je suis coincé. Je ne sais pas quoi faire? Est-ce que ça prend vraiment longtemps pour rebaser? git rebase --continue ne fait rien. Je n'ai rien dans le statut de 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.

101
Joseph Chambers

Rebase ne se produit pas en arrière-plan. "rebase en cours" signifie que vous avez démarré une rebase et que celle-ci a été interrompue en raison d'un conflit. Vous devez reprendre la base (git rebase --continue) ou l'abandonner (git rebase --abort).

Comme le message d'erreur de git rebase --continue le suggère, vous avez demandé à git d'appliquer un correctif qui aboutirait à un correctif vide. Cela signifie très probablement que le correctif a déjà été appliqué et que vous souhaitez le supprimer à l'aide de git rebase --skip.

200
Matthieu Moy

Vous avez dit à votre référentiel de se rebaser. On dirait que vous êtes sur un commit (identifié par SHA 9c168a5) et que vous avez ensuite fait git rebase master ou git pull --rebase master.

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

6
Schleis

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

$ 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
5
jsears

Je me suis retrouvé coincé dans le 'statut de rebase',

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 l'exécution de git rebase --skip a donné error: could not read '.git/rebase-apply/head-name': No such file or directory.

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

Remarque: bien sûr, ne le faites que si vous ne vous souciez pas de la base ou si vous êtes bloqué sur une base précédente que vous ne voulez plus.

3
Cat Boss
  • Étape 1: Continuez git rebase --continue

  • Étape 2: corrigez CONFLICTS puis git add .

  • Retour à l’étape 1, s’il est indiqué no changes .., puis exécuter git rebase --skip puis revenir à l’étape 1.

  • Si vous voulez juste quitter rebase, lancez git rebase --abort

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

2
Ani Menon

J'ai installé ma git sur base de données automatique sur un git checkout

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

Sinon, il se 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 puis à git cherry-pick <commit-id>, je me retrouve dans cet état bizarre à chaque fois qu'il y a un conflit.

Je dois effectivement abandonner la rebase, mais je résous d'abord le conflit, git add /path/to/file le fichier (un autre moyen 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 la 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'avortement. Je fixerai ma réponse si je découvris que je devrais abandonner la rebase plus tôt.

Le --force sur le Push est requis si vous ignorez d'autres commits et que les deux branches ne sont pas smooth (les deux sont des commits manquants de l'autre).

0
Alexis Wilke