master
から新しいブランチmy_experiment
を作成し、my_experiment
に対していくつかのコミットを行ったとします。 git log
でmy_experiment
を実行すると、このブランチに対して行われたコミットが表示されますが、my_experiments
ブランチが作成される前にmaster
に対して行われたコミットも表示されます。
my_experiments
ブランチへのすべてのコミットの履歴を、そのブランチの作成に到達するまで、事実上そのブランチの真の履歴を確認することは非常に便利だと思います。そうしないと、コミットがmy_experiments
ブランチ上にあるかどうかをログで見るとわかりません。
Gitでこれを行う方法はありますか?
range を使用してそれを行うことができます。
git log master..
my_experiment
ブランチをチェックアウトした場合。これは、master
の位置をHEAD
(my_experiment
のヒント)と比較します。
git merge-base
コマンドを使用して、共通の祖先を見つけることができます。したがって、my_experimentがまだmasterにマージされておらず、my_experimentがmasterから作成されている場合、次のことができます。
git log --oneline `git merge-base my_experiment master`..my_experiment
注:そのログを最後のnコミット(たとえば、最後の3つのコミット、git log -3)に制限する場合は、「n」とブランチの間にスペースを入れてください。
git log -3 master..
Git 2.1(2014年8月)より前のこの間違い:git log -3master..
は実際に現在のブランチの最後の3つのコミット(ここではmy_experiment
)を表示し、master
の制限を無視します(つまり、my_experiment
にコミットが1つしか含まれていない場合、3 master
から)
commit e3fa568 by Junio C Hamano(gitster
) を参照してください:
git log -<count>
」をより慎重に解析このタイプミスのコマンドラインは、単に「
master
」を無視し、現在のHEAD
からの2つのコミットを表示することになります。
$ git log -2master
これは、文字列全体が整数として解析されることを確認せずに「
2master
」をatoi()
にフィードするためです。代わりに
strtol_i()
ヘルパー関数を使用してください。
あなたの目的のためのオプションはgit log --oneline --decorate
だと思います。これにより、チェックされたコミットと、ストーリーラインにある各ブランチのトップコミットを知ることができます。これを行うことで、レポの構造と特定のブランチに関連付けられたコミットに関する素晴らしいビューが得られます。 this を読むと役立つと思います。
使用できるのはgit log --oneline
のみです
私はこれが非常に遅いことを知っています...しかし、ここにあなたが探していたものを得るための(それほど単純ではない)ワンライナーがあります:
git show-branch --all 2>/dev/null | grep -E "\[$(git branch | grep -E '^\*' | awk '{ printf $2 }')" | tail -n+2 | sed -E "s/^[^\[]*?\[/[/"
git show-branch
(警告を/dev/null
に送信)を使用して、ブランチ名と実際のブランチ状態への相対位置を含むコミットを一覧表示しています。grep -E "\[$BRANCH_NAME"
の括弧内にブランチ名を持つもののみを保持します。$BRANCH_NAME
はgit branch | grep -E '^\*' | awk '{ printf $2 }'
で取得されます(星の付いた枝、星のないエコー)。tail -n+2
で始まる冗長行を削除します。[$BRANCH_NAME]
の前にあるすべてをsed -E "s/^[^\[]*?\[/[/"
で削除して、出力をクリーンアップします。