72 votes

Comment savoir si il y a un git rebase en cours?

Quand je commence un git rebase -i, je ne peux émettre des commandes comme git rebase --continueou git rebase --abort. Ces commandes ne fonctionnent que si un rebase est en cours.

Comment puis-je savoir si il existe un rebase en cours?

(J'apprécierais quelques détails sur la façon dont cela fonctionne en interne; ce qui ne git faire pour les pensions de titres qu'il donne la "rebase en cours" statut?)

56voto

VonC Points 414372

Pour une chose, il y a un ORIG_HEAD en place pendant un rebase (mais qui n'est pas limitée à la commande rebase)

Mais vous pouvez aussi regarder à l' git-rebase.sh script lui-même (qui est comme "interne" que vous pouvez obtenir ;) ).
Des lignes comme celles-ci peuvent vous donner un autre indice:

dotest="$GIT_DIR"/rebase-merge
test -d "$dotest" -o -d "$GIT_DIR"/rebase-apply || die "No rebase in progress?"

sabgenton commentaires:

  • Le dossier rebase-apply semble apparaître avec rebase,
  • mais un dossier rebase-merge s'affiche uniquement avec des avec des rebase -i.

20voto

Jakub Narębski Points 87537

Vous pouvez également vérifier comment une telle détection est effectuée en __git_ps1 fonction contrib/completion/git-completion.bash, qui peut être utilisé pour git-conscient invite bash:

                if [ -f "$g/rebase-merge/interactive" ]; then
                        r="|REBASE-i"
                        b="$(cat "$g/rebase-merge/head-name")"
                elif [ -d "$g/rebase-merge" ]; then
                        r="|REBASE-m"
                        b="$(cat "$g/rebase-merge/head-name")"
                else
                        if [ -d "$g/rebase-apply" ]; then
                                if [ -f "$g/rebase-apply/rebasing" ]; then
                                        r="|REBASE"
                                elif [ -f "$g/rebase-apply/applying" ]; then
                                        r="|AM"
                                else
                                        r="|AM/REBASE"
                                fi

4voto

Ed Cashin Points 31

Si il y a un rebase interactif en cours, cela vous indiquera où vous en êtes dans le processus:

$ cat .git/rebase-merge/done 
pick 786139e lrg
edit 668b8a6 ktio
$ 

Droit maintenant, je suis en train de modifier le "ktio" patch dans un rebase interactif.

Si il n'y a pas de rebase, il ressemblera à ceci:

$ cat .git/rebase-merge/done 
cat: .git/rebase-merge/done: No such file or directory
$ 

4voto

Alexander Bird Points 5334

À partir d'une ligne de commande bash:

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

Qui retourne le code de sortie 0 (succès) si il y a un rebase dossier, et il sera de sortie le rebase dossier sur la sortie standard STDOUT. Si vous êtes pas dans le milieu d'un rebase, alors il sera de sortie rien et retour le non-0 code de sortie. Donc, vous pourriez même faire quelque chose comme ceci:

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

3voto

Rory O'Kane Points 4866

Si vous avez EasyGit, eg status va vous dire:

$ eg status
(Not currently on any branch.)
(YOU ARE IN THE MIDDLE OF A INTERACTIVE REBASE; RUN 'eg help topic middle-of-rebase' FOR MORE INFO.)
Changes ready to be committed ("staged"):
    modified:   .gitmodules
    renamed:    config_loader.rb -> code/config_loader.rb
Newly created unknown files:
    vendor/
(YOU ARE IN THE MIDDLE OF A INTERACTIVE REBASE; RUN 'eg help topic middle-of-rebase' FOR MORE INFO.)

Dans une couleur terminal, la notification est très importante:

<code>eg status</code> middle-of-rebase demonstration screenshot

(eg help topic middle-of-rebase affiche la documentation "Comment résoudre ou interrompre une incomplètes rebase".)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X