我一直在努力克服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分支设置为活动分支,并在离开几天前进行了一些更改。昨天回来后,我希望将任何已经应用到主干的更改整合到feature1分支中,以便使用最新版本进行工作。首先,我通过 git svn rebase 对所有分支进行了完整的更新(没有其他人对feature1分支进行过修改)。从我的svn仓库中,我把所有内容都更新到了最新状态,然后尝试进行变基。
当feature1为我的活动分支时,我执行了“git rebase trunk”,以为我将会从主干中将更改合并到feature1分支中。结果证明我非常、非常之错。在合并所有冲突后,我执行了git svn dcommit,发现我的更改已应用于主干上。
我的第一个问题很简单,我的思路出了什么核心错误?我的第二个问题是,在阅读和搜索了很多资料之后,我看到有些人推崇拉取(pulls)、合并(merges)和变基(rebases)。考虑到我想要将一个本地分支中应用的更改合并到另一个本地分支中,我应该做什么?在这种情况下,什么是最佳实践?
感谢您的帮助。