2009-09-11 144 views

回答

18
git rebase remotes/trunk --interactive 

應該把你的菜單,您可以選擇提交或他們都擠進了1承諾,以避免污染你的svn庫。 This與git-svn一起工作是一個非常好的(但很短的)資源。

+0

這似乎合併使用svn像一個非常好的解決方案。我不明白遙控器/後備箱在命令中的作用是什麼,最終的結果是我的所有提交都被壓縮在主控器內。我希望他們只會在發送給SVN時被壓制。壓縮完成後,有必要提交SVN。 – 2009-09-18 16:48:17

+0

@MacRae林::你的所有提交都必須在主控中被壓扁。如果他們不是git,將無法保持git和svn庫同步。當你重新拉取最新的變化svn會有一個提交,但在git中你會有n個提交。 – 2009-09-18 17:18:11

+0

@Jason Punyon:我遇到的問題是,在大師壓制提交之後,再次將主開發人員與我的開發分支合併變得困難。幾乎所有的變化都會導致合併衝突,這是一個巨大的痛苦。這是否讓我的發展分支與被壓扁的主人分開是不可避免的後果? – 2009-10-15 01:06:42

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 

而不是使用臨時標籤你可以也只是使用引用日誌

+0

這完全酷,這完全改變了我的工作流程,非常感謝 – 2009-10-14 21:27:11

3

當我使用git-svn並希望一系列git提交顯示爲單個提交時,我將處理主題分支,然後在dcommit -ing之前執行非快進的merge

首先,衍合分支對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   *---*---*---*---* 
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. 
+2

確保你添加了任何新文件。 「git commit -am」不會自行添加新文件。 – 2011-05-26 06:37:43

+0

另外,使用重置 - 軟件將保留所有階段的更改,以便您不必擔心添加文件或使用-a。 – PeterJCLaw 2012-03-04 12:56:24

0

,不是爲我工作的。我用merge --no-ff --no-commit但提交後,我得到了:

svntrunk      54f35e4 [trunk: ahead 336] release 1 

dcommitting到trunkwill提交所有336次的提交。

如答案#2:Combine local Git commits into one commit for git-svn中所述的重置,標記和壓扁將起作用,但在下一次「合併」時,您將有一些麻煩讓所有提交再次合併!

獨一無二的是爲我工作:

git checkout -tb svntrunk remotes/trunk 
git merge --no-commit --squash master 

讓所有提交的主人,失去歷史,面向未來使用相同的命令

〜馬塞爾