我的上游Post.available.where(
user.likes.where(post_id: Post.arel_table[:id]).exists.not
)
存储库存在以下情况:
我创建了一个svn
分支,并在其上做了一些工作,这导致了一个非常复杂的历史。所以我再次删除了它,保留了git提交,这使我能够很好地清理历史记录。
准备好补丁系列后,我使用svn
重新启动了我的分支,然后是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 repo,使我保留发布我的东西的能力git svn fetch
?当然,我总是可以删除整个事情,并创建一个具有不同名称的新git svn dcommit
分支,但我想知道是否存在更好的解决方案。
答案 0 :(得分:2)
我遇到了类似的情况,仍然无法找到关闭此行为的方法(--no-follow-parent
关闭整个分支跟踪,这不是我想要的。)
我最终用git replace --graft
修复了历史记录。它创建了一个替换提交和keeps its children unchanged。在替换之后(例如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
...