現在、git svn dcommit
git を実行すると、前回の SVN との同期以降に行ったすべてのローカル コミットに対して、SVN に個別のコミットが作成されます。dcommit
代わりに、最近のすべてのローカル コミットを SVN の 1 つのコミットに結合する方法はありますか?
6 に答える
git rebase remotes/trunk --interactive
svnリポジトリの汚染を回避するために、コミットを選択するか、すべてを1つのコミットにまとめることができるメニューが表示されます。 これは、git-svnの操作に関する非常に優れた(ただし短い)リソースです。
いいえ。ただし、すべてのコミットを非常に簡単にまとめることができます。次の例ではmaster
、リモートtrunk
ブランチに対応するブランチにいて、すべてのローカルコミットを一緒にスキッシュしたいとします。
git tag local # create a temporary tag
git reset --hard trunk
git merge --squash local
git commit # write your single commit message here
git svn dcommit
git tag -d local # delete the temporary tag named local
一時的なタグを使用する代わりに、reflogを使用することもできます(つまり、の代わりに使用しmaster@{1}
ますlocal
)
git-svn を使用していて、一連の git コミットを 1 つのコミットとして表示したい場合は、トピック ブランチで作業してから、 -ingの前merge
に master への非早送りを行います。dcommit
まず、svn に対してブランチをリベースし、ローカル マスターが最新であることを確認します。
git svn rebase && git push . remotes/trunk:master
次に、master に切り替え、merge して dcommit します。
git checkout master
git merge <branch> --no-ff -m "Message you want in svn"
git svn dcommit
これは Subversion では単一のコミットとして表示されますが、そのコミットに至ったローカルの履歴は残っています。
+--- Merge commit
V
svn trunk *---*---*-------------------*--- --- ---
\ /
topic branch *---*---*---*---*
より簡単な方法は次のとおりです(ローカルシステムに複数のコミットが積み重なっている場合):
git reset <hash tag of commit till which u need to combine>
git commit -am "your message" // This will create one clubbed commit of all the commit till the hash tag used.
これは私にとってはうまくいきました-いくつかのコミットを1つのコミットに押しつぶしてから、svnにコミットしました:
http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html
それは私のために働いていません。私は使用しますmerge --no-ff --no-commit
が、コミットした後、私は得ました:
svntrunk 54f35e4 [trunk: ahead 336] release 1
トランクにコミットすると、336 個すべてのコミットがコミットされます。
回答 #2:ローカル Git コミットを git-svn の 1 つのコミットに結合するで説明されているように、リセット、タグ付け、およびスカッシングは機能しますが、次の「マージ」では、すべてのコミットを再びまとめるのに問題が発生します。
私のために働いている唯一のもの:
git checkout -tb svntrunk remotes/trunk
git merge --no-commit --squash master
同じコマンドで将来のマージのために履歴を失うことなく、マスターから svn へのすべてのコミットを取得するには
〜マルセル