![](/img/trans.png)
[英]svn - merge trunk changes into branch and then put branch changes back into the trunk
[英]Using git-svn to merge a svn branch back into trunk and trunk back into the branch
所以我正在使用git並與svn repo進行交互。
我有一個svn TRUNK,看起來像這樣:
A-B-C-D
還有一個svn bug_fixes分支,它在提交B或C處分支:
-c-d-e-f-g-h-i
現在我需要將我的svn分支中的cdefghi提交返回到主分支。
我知道我可以做一個被壓扁的提交,讓我們稱之為壁球SQUASH(它將包含cdefghi),但后來似乎我必須殺死bug_fixes分支並啟動一個新的分支以干凈地繼續。
這里: http : //blog.red-bean.com/sussman/?p = 92他們建議:
checkout
分行。
merge
master的更改merge
到分支中。
Checkout
主人。
merge --reintegrate
將分支的更改merge --reintegrate
到主服務器上。
繼續發展。
不幸的是,git-svn似乎沒有認識到svn的任何“merge --reintegrate”命令。
那么我如何干凈地使分支和master擁有所有提交,以便使用git-svn的命令繼續開發兩者?
git-svn
文檔的警告部分警告
為了簡單和與功能較弱的系統(SVN)互操作,建議所有
git svn
用戶直接從SVN服務器clone
,fetch
和dcommit
,並避免git clone
之間的所有git clone
/pull
/merge
/push
操作存儲庫和分支機構。
作者提供了一個建議:
在git分支和用戶之間交換代碼的推薦方法是
git format-patch
和git am
,或者只是dcommit
到SVN存儲庫。
適應您的情況
git format-patch --stdout c^..i >my.patch
git reset --hard trunk
git am <my.patch
其中c
和i
是歷史記錄中提交的適當標識符。
好的,我發現了一些方法:
git checkout your_branch
git rebase master
git checkout master
git merge your_branch
要么
git checkout your_branch
git rebase master
git checkout master
git merge --squash your_branch
要么
git checkout your_branch
git rebase master
git checkout master
git rebase -i your_branch
畢竟那之后。
git svn dcommit (to commit to master)
git branch -D your_branch
然后(從svn因為git-svn不支持刪除)刪除分支,然后從trunk重新創建它並重新開始循環。
如果您不使用合並 ,您還可以選擇櫻桃 。
兩個語句都應該在沒有更改的分支上完成。
如果c比我年長,並且您想要采用整個序列。
git cherry-pick c..i
或單獨提交
git cherry-pick c d e f g h i
將你的本地東西( <branchpoint>..i
)重新定位到從SVN獲取的新主設備上,這不是一個好的案例嗎?
如果您提交合並,它會自動將其壓縮為1次提交。 遺憾的是它沒有在內部使用svn:mergeinfo或--reintegrate,因此你失去了與通過'git svn branch'創建的分支的關聯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.