マニュアル によると、git dcommit
「gitのコミットごとにSVNにリビジョンを作成します。」しかし、複数のSubversionリビジョンを回避する方法はありますか?つまり、svn commit
を実行する前にgitにすべての変更をマージさせるには?
Gitでブランチを操作する場合は、次のことができます git-merge --squash
、これはgit内でそれを行います。次に、その1つの押しつぶされたコミットをSVNにプッシュできます。
もちろん、小さなコミットがたくさんあるのは良いことですが、なぜそれらを潰したいのですか?
コマンドgit rebase -i
は、これなどを実行できます。このコマンドは非常に強力なので、友達を作るのは良いことです。
構文は次のとおりです:git rebase -i <commit ID>
。これにより、テキストエディタが表示され、指定されたIDまでの(含まない)すべてのコミットを変更するためのオプション(および手順)が表示されます。
たとえば、前の5つのコミットを変更するには、次のようにします。
git rebase -i HEAD~5
または、SVNブランチが「svn/trunk」と呼ばれる場合、この構文も適切です。
git rebase -i svn/trunk
次に、テキストエディタウィンドウがポップアップします。すべてを押しつぶすには、最初の行の後のすべての単語の最初の単語を「pick」から「squash」に変更します(これがわかりにくい場合は、表示するとわかりやすくなります)。次に、エディターを保存して閉じます。次に、押しつぶされたコミットのコミットメッセージを編集する機会があります。
git rebase -i
で実行できる他のことの中には、コミットの並べ替え、さまざまな方法でのコミットの破棄、およびコミットの削除があります。
私はこのコマンドを常に使用しています。これはGitのキラー機能です。
Ryan Tomaykogit rebase -i
について少し書いた、彼は言った:
…[それは] git commitに少し似ています--amendは酸に飛び乗ってチェーンソーを持っています–完全に狂気で非常に危険ですが、まったく新しい心の状態を明らかにすることができます。ここでは、既存のコミットを編集、押しつぶし、並べ替え、いじめ、注釈を付けることができます。これは、本来あるべきよりも簡単で直感的な方法です。
私はgitで頻繁にコミットする傾向がありますが、必ずしもすべてのコミットをsvnにコミットする必要はなく、すべての作業を押しつぶしても同じくらい少なくなりますセンス。私は今、いくつかを並べ替えて、より論理的なコミットユニットにまとめようとしています。