![](/img/trans.png)
[英]Merge two identical git-svn branch HEADs without losing link with git-svn remote branch?
[英]GIT SVN: fetching a recreated SVN branch without the wrong merge parent
我的上游svn
存儲庫有以下情況:
我創建了一個svn
分支,並在其上做了一些工作,這導致了一個非常復雜的歷史。 所以我再次刪除了它,保留了git提交,這讓我可以很好地清理歷史。
一旦我准備好補丁系列,我使用svn copy
克隆了我的分支,然后是git svn fetch
。 我的想法是,然后我將清理后的歷史記錄重新修改為新的svn
分支,以便我可以使用git svn dcommit
輕松發布它。
但是, git svn fetch
並沒有達到我的預期。 這就是我的預期(假git log --oneline --decorate --graph
輸出):
* xxxxxxx (svn-branch)
* xxxxxxx (svn-parent-branch)
...
somewhere further down, unrelated to the above
* xxxxxxx (old-svn-branch-head)
但這就是我得到的:
* xxxxxxx (svn-branch)
|\
| * xxxxxxx (svn-parent-branch)
|
* xxxxxxx (old-svn-branch-head)
如您所見, git svn fetch
完全忽略了svn
分支被刪除的事實,將重新創建的svn
提交映射到git
的合並提交。 現在,我不會對此大驚小怪,如果這不重要,但不幸的是,錯誤的連接會混淆git
的合並算法,在新的分支基礎提交中進行重新定位時會產生虛假的合並沖突。
所以我的問題是:我怎么能誘使git svn fetch
沒有將新的分支基礎提交與錯誤的父級鏈接,或以某種方式修復我的git repo,我保留了使用git svn dcommit
發布我的東西的能力? 當然,我總是可以刪除整個事情,並創建一個具有不同名稱的新svn
分支,但我想知道是否存在更好的解決方案。
我遇到了類似的情況,仍然無法找到關閉此行為的方法( - --no-follow-parent
關閉整個分支跟蹤,這不是我想要的)。
我最終用git replace --graft
來修復歷史。 它創建一個替換提交並保持其子項不變 。 在替換之后(例如git replace --graft svn-branch svn-parent-branch
)這就是你看到的:
* svn-branch
|
* svn-parent-branch
...
* old-svn-branch-head
您仍然可以使用gitk --all
選項查看原始提交。
* svn-branch (replacement)
|
| * svn-branch (original)
|/|
* | svn-parent-branch
| |
| * old-svn-branch-head
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.