web-dev-qa-db-ja.com

git rebaseが進行中かどうかを知る方法は?

git rebase -iを開始すると、git rebase --continuegit rebase --abortなどのコマンドを発行できます。これらのコマンドは、リベースが進行中の場合にのみ機能します。

進行中のリベースがあるかどうかを知るにはどうすればよいですか?

(内部でrebaseがどのように機能するかについての詳細を大いに感謝します。gitは、rebaseに「rebase in progress」ステータスを与えるために何をしますか?)

63
Olivier Verdier

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?"

sabgentonコメント

  • フォルダーrebase-applyrebaseとともに表示されるようです。
  • ただし、フォルダーrebase-mergerebase -iでのみ表示されます。

そして hippy また comments 、2017年には:

コーディングガイドラインは-oDocumentation/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+(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)

statusrebase -i中に詳細情報を提供します

git statusは、rebase -i中に、リベース中に実行されるコマンドのリストに関する詳細情報を提供します。
表示内容:

  • 最後に実行された2つのコマンドと
  • 実行される次の2行。

また、.gitディレクトリ内のファイル全体を見つけるためのヒントも提供します。

49
VonC

また、 __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
16
Jakub Narębski

進行中のインタラクティブなリベースがある場合、これはプロセスのどこにいるかを示します。

$ 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
$ 
3
Ed Cashin

EasyGiteg 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は、ドキュメント「 不完全なリベースを解決または中止する方法 」を表示します。

3
Rory O'Kane

Bashコマンドラインから:

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

リベースフォルダーがある場合、終了コード0(成功)が返され、リベースフォルダーがSTDOUTに出力されます。リベースの途中でnotの場合、何も出力せず、0以外の終了コードを返します。したがって、次のようなこともできます。

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

このコマンドを使用していますis_rebase=$(git status | grep "rebasing" | wc -l)

1
BILL