【问题标题】:Switch the svn branch git dcommits to将 svn 分支 git dcommits 切换到
【发布时间】:2011-10-07 11:42:35
【问题描述】:

我有 master dcommit 到(和 rebase 来自)Subversion trunk

我创建了一个中间 Subversion 分支tc,用于合并来自 2 个不同分支的更改,使用:

git branch master
git svn branch tc -m "Branch for merging"
git checkout -b tcl --track tc
git merge cat #Another branch, whose changes I merged here
git commit -m 'Merged changes from cat branch'
git svn dcommit

既然一切都很好,我想把它推广到trunk。我跟着做:

git branch master
git merge tcl
git svn dcommit

现在,因为 master 是从另一个指向不同 Subversion 分支的分支合并而来的,它会尝试提交到 Subversion 分支 tc。我希望它提交给 Subversion trunk

git svn switch 之类的吗?

我知道我的工作流程不是最佳的,也欢迎任何改进它的建议。

【问题讨论】:

  • 我不知道您的问题的答案,但我强烈推荐的一件事是在执行实际 dcommit 之前始终执行git svn dcommit -n(试运行)。这样做的一个原因是,您可以确保您正在提交您要提交的 svn 分支。

标签: git svn git-svn branching-and-merging


【解决方案1】:

正如this question 中所述,在带有git-svn 的存储库中使用git merge 不是一个好主意。

相反,将更改“合并”到master 中应该做的是:

git checkout master
git format-patch --stdout master..tcl | git am
git svn dcommit

在这种情况下git merge 的问题在于它还将mastergit-svn URL 设置为SVN tc 分支。 format-patcham 组合只接受更改本身。

【讨论】:

  • 变基而不是合并会有同样的问题吗?
  • 如果你想重新提交一个 svn 分支,你永远不应该 rebase 任何东西,因为你做不到。 svn 不支持修改历史记录。
  • 好吧,我下次不做了。但是如果问题已经存在,它如何解决问题呢?
  • @jlengrand 你能解释一下你的问题吗?如果您已经合并并且想要重新提交,则必须在合并之前返回 git reset 并使用上述方法重新执行。
  • 是的,我已经合并了:)。过了一会儿,我在@dyodji 的回答中找到了stackoverflow.com/questions/2835791/… 的解决方案:)。不过感谢您的回答!
【解决方案2】:

AFAIK --no-ff 合并会按照你想要的方式进行:

git branch master
git merge --no-ff tcl
git svn dcommit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2013-03-21
    • 2016-11-23
    • 2013-01-17
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多