2013-07-22 9 views
8

featureという簡潔な名前の機能ブランチがあります。このブランチには、すべての種類の機能に関連する約100個のコミットがあります。これらのコミットはすべて時間の経過とともにマスターブランチにマージされました。ブランチにあったすべてのコミットをリストしたいので、その機能を他のプロジェクトに再追加することができます。トピックブランチ内のすべてのコミットを一覧表示する

基本的には、下のグラフの緑色の点のコミットIDが必要です。

relevant commits

どのように私は、関連するすべてのコミットIDをgitkまたは同様のツールと手収集するために行くことによって、その後のGitの他のことを行うことができますか?

答えて

3

が与えられたと、私はこれを行うために、より自動的な方法をお勧めします(ただし、それはのみ動作します受け入れられていますあなたのmasterfeatureにマージしていない場合:

次の歴史を考えると:

--A---B---C---D---E---F---G (master) 
     \ / /
     H---J-------K  (feature) 

を基本的にはgit log B..featureを実行します。

git log --format='%H' feature..master | tail -1 | \ 
xargs -I '{}' git log '{}'^..feature 

git log --format='%H' feature..master | tail -1あなたがfeatureブランチを作成した後、右に行われたmasterにコミットするでしょう - これはC

され、Cの祖先 - Bfeatureの最初のコミットHの祖先になりますブランチ。その後

xargs -I '{}' git log '{}'^..feature(つまりgit log B..featureになっている)だけでfeatureから到達可能であるコミットを示すが、Bから到達できません。

+2

コミットの開始をハンドピックする必要がある 'feature'ブランチのやや乱雑な部分がありますが、そうでなければあなたのレシピは正常に動作します。 'git log $(git rev-list feature ... master | tail -1)^ .. feature' – sanmai

+2

[Gitで分岐点を探す?](http://stackoverflow.com/q/)を参照してください。分岐開始点の検索方法の詳細は、1527234)を参照してください。 – CharlesB

6

あなたが特定のブランチの開始点を取得した場合、例えば、SHA1、この試してみてください。答えにもかかわらず

git log --pretty=oneline SHA1^..feature