2016-07-18 5 views
0

特定のプロジェクトでリベースされて縮小されたコミットの数を特定できるかどうかは疑問です。私はスカッシュを実行したものだけでなく、すべてのリベースを解決することができます。rebase -iを使用して押しつぶされたコミットを特定する-i

私は基本的に、ユーザが特定のプロジェクトのために走ったリベースの数を数えることができる関数を記述しようとしています。

例えば、次のハッシュを持つ3つのコミットを持つプロジェクトがある場合123456789999。私はそれが1234をコミット識別できるようにしたい はもともと11112222をコミットしたが、リベースと1234をコミットするために一緒に押しつぶされました。

同様に、私はgit log | grep -i mergeを実行して、マージして作成されたものをコミット見つけることができます。

理想的には、これは前述のコマンドと同様の1ライナーになります。

2つ以上のコミットを1つに縮退する経験から、改行によって結合されたすべてのコミットメッセージを含むリベースされたコミットが発生します(リベース中にコミットメッセージは編集されないものとします)。この情報では、それは可能ではないようです。それでも、私のプロジェクトが大いに役立つので、これをやりたいと思っています。

TLDR:リベースによって作成されたコミットを検出する1つのライナー。 Gitはリベースされたコミットをマークするために特別なことをしますか?

+0

"2つ以上のコミットを1つに縮退した経験から、改行によって結合されたすべてのコミットメッセージを含むリベースされたコミットになります。 - そんなことさえありません。それはちょうどデフォルトです。メッセージは、リベース中またはリベース後に編集することができます。しかし、再び、マージコミットは必ずしもそのメッセージに「マージ」という単語を含むとは限りません。プロジェクトに関する多くの情報がなくても、どのような前提が可能かはっきりしていません。 – hvd

+0

@hvdはい、リベース中にコミットメッセージが編集されていないと仮定していました。編集された質問を参照してください。 – marcusshep

+0

あなたのローカルリポジトリでは、reflogを使っておおよその見積もりを得ることができます: 'git reflog | awk 'BEGIN {n = 0}/rebase -i/{n + = 1; next} {if(n)print n; @ 0} END {if(n)print n} '' – eush77

答えて

1

git reflogを使用してこのタスクを達成できました。

git reflogには、リベースが含まれています。次のように

典型的な出力は次のようになります。この情報を

some-computer:test_project marcusshepherd$ git reflog 
On branch master 
nothing to commit, working directory clean 
47066c8 [email protected]{0}: rebase -i (finish): returning to refs/heads/master 
47066c8 [email protected]{1}: rebase -i (squash): add bar.txt 
ae35743 [email protected]{2}: rebase -i (start): checkout HEAD~2 
7c5b185 [email protected]{3}: commit: edit bar.txt 
ae35743 [email protected]{4}: commit: add bar.txt 
a9b6aa1 [email protected]{5}: commit (initial): init 

私はそれらをカウントし、次に文字列rebasefinishの両方を含むすべてのコマンドを見つけることができました。これにより、任意のプロジェクトに対して正しい数のリベースが得られます。

私はこの問題を解決して満足しています。

関連する問題