マニュアルによると、git dcommit
「gitのコミットごとにSVNにリビジョンを作成します。」しかし、複数のSubversionリビジョンを回避する方法はありますか?つまり、svn commit
?を実行する前にgitにすべての変更をマージさせることです。
3 に答える
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 Tomaykoは について少し書いておりgit rebase -i
、次のように述べています。
…[それは] git commit --amend が酸に飛び乗ってチェーンソーを持っているようなものです。完全に正気ではなく、非常に危険ですが、まったく新しい心の状態を暴露することができます。ここでは、本来あるべきよりも簡単で直感的な方法で、既存のコミットを編集、圧縮、並べ替え、分解、および注釈を付けることができます。
私は頻繁に git にコミットする傾向がありますが、すべてのコミットを svn にコミットする必要はありません。私は今、いくつかを並べ替えて、より論理的なコミットユニットにまとめようとしています。