我一直在与 git/git-svn 学习曲线作斗争,昨晚,作为学习曲线的一部分,我做了一些非常非常糟糕的事情。我已经纠正了它,但我希望以我的方式理解错误。
我有一个 svn 存储库,我从中克隆了主干和分支(我忽略了标签,因为我们不处理这些标签)。使用 git,我为当前需要使用的每个分支创建了本地分支:
$ git checkout -b trunk svn/trunk
$ git checkout -b feature1 svn/branches/development/feature1
$ git checkout -b maint svn/branches/maintenance/previous-version
我将 feature1 设为我的活动分支,并进行了一些更改,然后被拉走了几天。我昨天回来想整合对主干所做的任何更改,以便我可以使用最新和最好的。我所做的是首先完整更新所有支架,通过git svn 变基(没有其他人在 feature1 分支上工作过)。随着我的 svn 存储库中的所有内容都是最新的,我尝试重新设置基准。
使用 feature1 作为我的活动分支,我做了一个“git rebase trunk”,认为我将从主干中提取更改intofeature1 分支。事实证明我是非常非常错误的。合并所有冲突后,我做了一个git svn dcommit并发现我的更改已应用于主干。
我的第一个问题是我的思维过程中的核心错误在哪里?我的第二个想法是,经过大量阅读和谷歌搜索后,我看到人们支持拉取、合并和变基。鉴于我想将一个本地分支中应用的更改合并到另一个本地分支,该怎么办should我已经做好了?这种情况的最佳实践是什么?
感谢您的帮助。
您遇到的问题是 rebase 的命令行语法与您的(非常合理的,IMO)期望不符。
$ git checkout feature1
$ git rebase trunk
此序列将非共享的 feature1 提交添加到 trunk 的 HEAD 上,并且您期望它将新的 trunk 提交放置到 feature1 的 HEAD 上。
当您了解 Git 的数据模型是如何实现的时,该语法实际上是有意义的(这无疑就是为什么它是这样的)。但对我来说,它在功能上与我的预期相反。最好将其作为任意结构来学习,而不是试图抱有期望。
您是对的,您了解如何使用 git-svn 与 SVN 存储库进行交互。所以忽略你在谷歌搜索中发现的关于推、拉和合并的内容——有很多人的讨论几乎是正确的,他们的行为就好像推、拉和合并在 git 和 svn 中是相同的。几乎正确仍然是错误的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)