Как узнать, есть ли git rebase в процессе?
когда я начинаю git rebase -i, Я могу выдавать команды, как git rebase --continue или git rebase --abort. Эти команды работают только в том случае, если выполняется перебазирование.
как я могу знать, если есть перебазирование в процессе?
(Я был бы очень признателен за некоторые подробности о том, как rebase работает внутри; что git делает с РЕПО, которое дает ему статус "rebase in progress"?)
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?"
- в папка
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.)в цветном терминале уведомление очень заметно:
(
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
