git rebase -i
を開始すると、git rebase --continue
やgit rebase --abort
などのコマンドを発行できます。これらのコマンドは、リベースが進行中の場合にのみ機能します。
進行中のリベースがあるかどうかを知るにはどうすればよいですか?
(内部でrebaseがどのように機能するかについての詳細を大いに感謝します。gitは、rebaseに「rebase in progress」ステータスを与えるために何をしますか?)
1つには、リベース中にORIG_HEAD
があります (があります(ただし、 rebaseコマンド)
しかし、2010 Git 1.7.0git-rebase.sh
script自体(「内部「あなたが得ることができるように;))。
これらのような行は、別の手がかりを与えることができます。
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
でのみ表示されます。そして hippy また comments 、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?"
(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+(2015年第3四半期)では、リベース中に詳細情報が出力されます。
コミット592e412 、 コミット84e6fb9 (2015年7月6日)、 コミット84e6fb9 (2015年7月6日)、および コミットdf25e94 を参照=、 コミット05eb56 (2015年6月30日)by GuillaumePagès(gitster
) 。
( 浜野潤二-gitster
- in commit 178d2c7 、03 Aug 2015)
status
:rebase -i
中に詳細情報を提供します
git status
は、rebase -i
中に、リベース中に実行されるコマンドのリストに関する詳細情報を提供します。
表示内容:
- 最後に実行された2つのコマンドと
- 実行される次の2行。
また、
.git
ディレクトリ内のファイル全体を見つけるためのヒントも提供します。
また、 __git_ps1
の関数contrib/completion/git-Prompt.sh
で、このような検出がどのように行われるかを確認することもできます。これは、git対応の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
進行中のインタラクティブなリベースがある場合、これはプロセスのどこにいるかを示します。
$ 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
$
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
は、ドキュメント「 不完全なリベースを解決または中止する方法 」を表示します。
Bashコマンドラインから:
ls `git rev-parse --git-dir` | grep rebase
リベースフォルダーがある場合、終了コード0(成功)が返され、リベースフォルダーがSTDOUTに出力されます。リベースの途中でnotの場合、何も出力せず、0以外の終了コードを返します。したがって、次のようなこともできます。
ls `git rev-parse --git-dir` | grep rebase || echo no rebase
このコマンドを使用していますis_rebase=$(git status | grep "rebasing" | wc -l)