ローカルGitコミットをgit-svnの1つのコミットに結合します
質問
現在、 git svn dcommit
を実行すると、gitはSVNと最後に同期してから行ったローカルコミットごとにSVNで個別のコミットを作成します。 dcommit
が代わりに最近のローカルコミットをすべてSVNの1つのコミットに結合する方法はありますか?
解決
git rebase remotes/trunk --interactive
svnリポジトリの汚染を避けるために、コミットを選択するか、すべてを1つのコミットにまとめるメニューに移動する必要があります。 これは、作業に関する非常に優れた(ただし短い)リソースです。 git-svnで。
他のヒント
いいえ。ただし、すべてのコミットを簡単にまとめてスキッシュできます。次の例では、リモートの trunk
ブランチに対応する master
ブランチにいて、すべてのローカルコミットをまとめてスキッシュすると仮定します:
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を使用することもできます(つまり、 local
の代わりに master @ {1}
を使用)
git-svnで作業し、一連のgitコミットを単一のコミットとして表示したい場合、トピックブランチで作業してから、マスターへの非早送り merge
を実行します dcommit
-ingの前。
まず、svnに対してブランチをリベースし、ローカルマスターが最新であることを確認します:
git svn rebase && git push . remotes/trunk:master
その後、マスターに切り替え、マージして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へのすべてのコミットを、同じコマンドで将来のマージのために履歴を失うことなく取得するには
〜マルセル