Как узнать, есть ли 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