Как узнать, есть ли git rebase в процессе?


когда я начинаю git rebase -i, Я могу выдавать команды, как git rebase --continue или git rebase --abort. Эти команды работают только в том случае, если выполняется перебазирование.

как я могу знать, если есть перебазирование в процессе?

(Я был бы очень признателен за некоторые подробности о том, как rebase работает внутри; что git делает с РЕПО, которое дает ему статус "rebase in progress"?)

6 57

6 ответов:

в одном есть ORIG_HEAD на месте во время перебазирования (но это не ограничивается командой перебазирования)

но вы также можете посмотреть на 2010 Git 1.7.0 git-rebase.sh скрипт сам (который является "внутренним", как вы можете получить ;) ).
Такие строки могут дать вам еще одну подсказку:

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

sabgentonкомментарии:

  • в папка rebase-apply кажется, появляются с rebase,
  • но папку rebase-merge только с rebase -i.

и хиппи и комментарии, в 2017 году, что:

руководящие принципы кодирования препятствуют использованию -o (см. Documentation/CodingGuidelines), так что правильный путь сейчас (2017, но и с 2011 года, Git 1.7.6) - это:

(test -d ".git/rebase-merge" || test -d ".git/rebase-apply") || die "No rebase in progress?"

Jelaby предлагает в комментариях:

(test -d "$(git rev-parse --git-path rebase-merge)" || \
 test -d "$(git rev-parse --git-path rebase-apply)" )

это правильно обрабатывает рабочие деревья и необычные или нестандартные макеты, которые не имеют .git каталог, а также позволяет запускать этот тест из поддира рабочего каталога.

это потому что git rev-parse --git-path <path>: не решит "$GIT_DIR/<path>".


Git 2.6+ (Q3 2015) будет печатать дополнительную информацию во время перебазирования:

посмотреть совершить 592e412,commit 84e6fb9 (06 июля 2015),commit 84e6fb9 (06 июля 2015), и commit df25e94,совершить 05eb563 (30 июня 2015) by Guillaume Pagès (gitster).
(слитый Junio C Hamano--gitster-- in совершить 178d2c7, 03 авг 2015)

status: дайте больше информации во время rebase -i

git status дает больше информации при rebase -i, о списке команд, которые выполняются во время перебазирования.
Он отображает:

  • последние две команды выполняются и
  • следующие две строки, которые будут выполнены.

он также дает подсказки, чтобы найти все файлы в .

вы также можете проверить, как такое обнаружение выполняется в

Если у вас EasyGit,eg status скажу вам:

$ 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.)

в цветном терминале уведомление очень заметно:

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

(eg help topic middle-of-rebase отображает документации "как разрешить или прервать неполную перебазировку".)

Если есть интерактивный перебазирование в процессе, это скажет вам, где вы находитесь в процессе:

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

прямо сейчас я редактирую патч "ktio" в интерактивной ребазе.

Если нет перебазирования происходит, это будет выглядеть так:

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

из командной строки bash:

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

это вернет код выхода 0 (успех), если есть папка rebase, и он выведет папку rebase в STDOUT. Если ты не в середине перебазирования, то он будет выводить ничего и возвращать не-0 код выхода. Так что вы могли бы даже сделать что-то вроде этого:

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

Я использую эту команду is_rebase=$(git status | grep "rebasing" | wc -l)