2016-02-29 14 views
22

Squashingはgitの意味で何をコミットしますか?どのように私はGithubのコミットを押しつぶすのですか?gitでSquashingのコミットは何ですか?

私はGitTを使い慣れていないので、コアラアナライザの新しいバグに割り当てられるように要求されました。私はバグを修正し、今私は私のコミットを押しつぶすように求められました。どうすればいいのですか?

答えて

42

:見て。

Gitの素晴らしい機能の1つは、コミットの履歴を書き換える機能です。
これを行う主な理由は、そのような履歴の多くは、それを生成した開発者にのみ関係するため、共有リポジトリに送信する前に、単純化したり、よりうまく行ったりする必要があるということです。で導入された変更を移動するには、ビューの慣用的な観点から、手段をコミット退治

あなたは補数の外にコミット1で終わるように、その親にコミットしました。
このプロセスを複数回繰り返す場合は、nを1つに減らすことができます。あなたがコミットであなたの仕事を始めたスタートをタグ付けされた場合

視覚的には、あなたは新しいコミット青のやや暗い影を持っていることがわかり、この

Git commits squashing

をしたいです。これは意図的です。 Gitの押しつぶしで

インタラクティブリベースと呼ばれる特別な形態のリベース、により達成されます。
簡略化コミットセットをブランチにリベースすると、Bのように、元の祖先ではなく、Bからのコミットによって導入されたすべての変更が適用されます。

視覚的な手がかり

enter image description here

注青のまた違った色合い。

git rebase -i branch 

あなたはそれが

pick ae3... 
pick ef6... 
pick 1e0... 
pick 341... 
をリベースされますコミットリストファイルで終わるでしょう:

インタラクティブリベースこのコマンドを実行した場合、あなたはリベースするかをコミットを選択しましょう

私はコミットに名前を付けませんでしたが、これらの4つはコミットであることを意図しています。開始からヘッド

このリストの良い点はです。編集可能なのはです。
コミットを省略することもできますが、には、をスワッシュできます。
最初の単語をに変更するだけで、スクロールに変更するだけです。

pick ae3... 
squash ef6... 
squash 1e0... 
squash 341... 

エディタを閉じて、何のマージ競合が検出されていない、あなたはこの歴史で終わる場合:お使いの場合には

enter image description here

、あなたは別のブランチにリベースしたくありません、むしろ前のコミットになります。
非常に最初の例に示すように、歴史を変換するためには、あなたはすべてのコミットについてスカッシュに変更し、「コマンド」が、あなたのエディタを終了し、その後第一及び

git rebase -i HEAD~4 

のようなものを実行する必要があります。


Gitのでは

を歴史を変更することについての注意事項に編集されることはありませんコミット、彼らは、剪定到達できない作られた、クローン化されたが、変更しないことができます。
リベースすると、実際には新しいコミットが作成されます。
古いものはrefで到達できないため、履歴には表示されませんが、まだそこにあります。

は、これはあなたが実際にリベースのために得たものである:

enter image description here

すでにどこかにそれらをプッシュしている場合は、歴史を書き換えは、実際の分岐を行います!

+0

ニース - 元のコミットに何が起こるのかコメント - それらは1つの大きなコミットコメントにまとめられますか、それとも失われますか? –

+0

'' man git rebase'から: - 提案されたコミット 折り返しコミットのメッセージはコミット の最初のコミットのメッセージと "スカッシュ"コマンドのメッセージです。 –

+0

ありがとう - 知っておきたいことです! –

関連する問題