web-dev-qa-db-ja.com

git svn dcommitを単一のsvncommitにすることは可能ですか?

マニュアル によると、git dcommit「gitのコミットごとにSVNにリビジョンを作成します。」しかし、複数のSubversionリビジョンを回避する方法はありますか?つまり、svn commitを実行する前にgitにすべての変更をマージさせるには?

42
plindberg

Gitでブランチを操作する場合は、次のことができます git-merge --squash 、これはgit内でそれを行います。次に、その1つの押しつぶされたコミットをSVNにプッシュできます。

もちろん、小さなコミットがたくさんあるのは良いことですが、なぜそれらを潰したいのですか?

34
davetron5000

コマンド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のキラー機能です。

27
andy

Ryan Tomaykogit rebase -iについて少し書いた、彼は言った:

…[それは] git commitに少し似ています--amendは酸に飛び乗ってチェーンソーを持っています–完全に狂気で非常に危険ですが、まったく新しい心の状態を明らかにすることができます。ここでは、既存のコミットを編集、押しつぶし、並べ替え、いじめ、注釈を付けることができます。これは、本来あるべきよりも簡単で直感的な方法です。

私はgitで頻繁にコミットする傾向がありますが、必ずしもすべてのコミットをsvnにコミットする必要はなく、すべての作業を押しつぶしても同じくらい少なくなりますセンス。私は今、いくつかを並べ替えて、より論理的なコミットユニットにまとめようとしています。

7
cbowns