アップデート
amalloy が指摘したように、最近のバージョンの git は、追跡ブランチの場合は「branchname@{upstream}」(または「branchname@{u}」または「@{u}」) を指定して、特定のブランチに一致する追跡ブランチを見つけることをサポートしています。頭の)。これは、以下のスクリプトに実質的に取って代わります。できるよ:
git rev-list @{u}..
git rev-list --left-right --boundary @{u}...
gitk @{u}...
など。たとえば、プッシュの準備ができている「キューに入れられた」コミットを表示するためにgit q
エイリアスを作成しました。git log --pretty='...' @{u}..
元の答え
いくつかのシェル コマンドで実用的であるよりも多くの git config を解析せずに、一般的に追跡ブランチを見つける簡単な方法はないようです。しかし、多くの場合、これは大いに役立ちます。
# work out the current branch name
currentbranch=$(expr $(git symbolic-ref HEAD) : 'refs/heads/\(.*\)')
[ -n "$currentbranch" ] || die "You don't seem to be on a branch"
# look up this branch in the configuration
remote=$(git config branch.$currentbranch.remote)
remote_ref=$(git config branch.$currentbranch.merge)
# convert the remote ref into the tracking ref... this is a hack
remote_branch=$(expr $remote_ref : 'refs/heads/\(.*\)')
tracking_branch=refs/remotes/$remote/$remote_branch
# now $tracking_branch should be the local ref tracking HEAD
git rev-list $tracking_branch..HEAD
別の、より強引なアプローチ:
git rev-list HEAD --not --remotes
jamessan's answer は、 $tracking_branch と HEAD を使用して相対的な違いを見つける方法を説明していますgit rev-list
。あなたができる1つの楽しいこと:
git rev-list --left-right $tracking_branch...HEAD
( $tracking_branch と HEAD の間の3 つのドットに注意してください)。これにより、両方の「アーム」のコミットが先頭に識別マーク付きで表示されます: $tracking_branch のコミットは「<」、HEAD のコミットは「>」です。