28

現在、git svn dcommitgit を実行すると、前回の SVN との同期以降に行ったすべてのローカル コミットに対して、SVN に個別のコミットが作成されます。dcommit代わりに、最近のすべてのローカル コミットを SVN の 1 つのコミットに結合する方法はありますか?

4

6 に答える 6

18
git rebase remotes/trunk --interactive 

svnリポジトリの汚染を回避するために、コミットを選択するか、すべてを1つのコミットにまとめることができるメニューが表示されます。 これは、git-svnの操作に関する非常に優れた(ただし短い)リソースです。

于 2009-09-11T00:18:33.117 に答える
17

いいえ。ただし、すべてのコミットを非常に簡単にまとめることができます。次の例では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

于 2009-09-11T00:18:45.737 に答える
3

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         *---*---*---*---*
于 2010-11-05T00:21:12.740 に答える
3

より簡単な方法は次のとおりです(ローカルシステムに複数のコミットが積み重なっている場合):

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.
于 2011-05-26T06:34:11.067 に答える
2

これは私にとってはうまくいきました-いくつかのコミットを1つのコミットに押しつぶしてから、svnにコミットしました:

http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

于 2010-11-05T00:00:05.237 に答える
0

それは私のために働いていません。私は使用します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 へのすべてのコミットを取得するには

〜マルセル

于 2011-07-13T08:22:08.590 に答える