2つのGitブランチが分岐しているかどうか、あるいはブランチの1つが他のブランチにただちに転送できるかどうかを判断したいと思います。2つのGitブランチが分岐しているかどうかを確認する
つまり、ブランチの1つの現在のHEADが、ある時点で他のブランチにマージされているかどうか、または他のブランチにないコミットが含まれているかどうかをチェックします。
実際に2つのブランチをマージすることなくこれを行う方法はありますか?この場合、簡単なgit diff
は役に立ちません。
2つのGitブランチが分岐しているかどうか、あるいはブランチの1つが他のブランチにただちに転送できるかどうかを判断したいと思います。2つのGitブランチが分岐しているかどうかを確認する
つまり、ブランチの1つの現在のHEADが、ある時点で他のブランチにマージされているかどうか、または他のブランチにないコミットが含まれているかどうかをチェックします。
実際に2つのブランチをマージすることなくこれを行う方法はありますか?この場合、簡単なgit diff
は役に立ちません。
私はその目的のために、このシェルスクリプトのスニペットを使用しています:
git_is_merged() {
local revlist
revlist=$(git rev-list -1 "$1" --not "$2")
if [ $? -eq 0 ]; then
if [ "$revlist" = "" ]; then
echo "'$1' IS merged into '$2'."
else
echo "'$1' is NOT merged into '$2'."
fi
fi
}
alias gim='git_is_merged'
はorigin/devel
がorigin/master
にマージされているかどうかを判断するためにgim origin/devel origin/master
のようにそれを使用してください。
編集:完全を期すために、あなただけの名前の枝で作業している場合、あなたはまた、同じ目的のために
git branch --contains origin/devel | grep -q origin/master && echo "Merged" || echo "Not merged"
または
git branch --merged origin/master | grep -q origin/devel && echo "Merged" || echo "Not merged"
を使用することができます。
あなたは説明がhereを見つけることができますgit merge-base
を使用することができます。
そしてそれを完成させるために: 'm =" $(git merge-base b1 b2) "; –
グラフィックツールを使用する場合は、gitk branch1 branch2
を使用できます。 これにより、必要に応じて分岐コミットを検査することもできます。
単純に早送りが可能な場合は、git merge --ff-only otherbranch
が成功します。 (それができない場合は、マージコミットよりも却下されます)
非常にいい:)私は 'git for-eachを使って遊んでいました。(' git rev-parse b1) '' $ m "=" $ git rev-parse b1 " -ref | grep $(git merge-base) 'と書いて、シェル関数を書くことを考えましたが、あなたのソリューションは間違いなくきれいに見えます。 –
@sschuberthの謝罪は、提案された編集であなたのつま先をステップすることを意味しませんでした。既に関数を持っているときにエイリアスを作成する必要はありません。関数内でlocalキーワードを使用しないと、revlist varは実行後に環境内に存続します。 $ 1/$ 2の引数を引用しないと、gitが有効で許可されている奇妙なブランチ名に問題が発生する可能性があります。セミコロン、引用符などが含まれます。この編集は2人の査読者によって承認されましたが、これ以上の変更はありません。 – ReenignE
@ReenignE心配はいりません。私は明確な価値をもたらす編集には感謝していますが、この場合の価値は私には明らかではありませんでした(そして今回はあなたの足元を歩きたくない私です)。たぶん、それはちょうどBashの私の中間的な知識のためです。私は故意にこの "余分な"エイリアスを使って、 'gim'が何を表すのか強調しました。しかし、私は引数を引用し、ローカル変数を持つことの価値を見てそれに応じて私の答えを調整しました。ありがとう。 – sschuberth