2011-03-30 96 views
0

我正在尝试使用git进行本地工作流管理,并着眼于为我的团队提出建议。所以我想充分了解我的头脑,然后我会反驳一些我不明白的事情。Rebase,但忽略一个上游提交?

在我进入git-land的时候,我有一个SVN仓库,让我和另外一个开发人员开始工作。我们的PM改变了项目的时间表,以便他的子项目几乎立即投入生产,然后在大约一个月内投入生产。我们都在开发相同的SVN回购协议,我的东西已经开始对用户可见,所以需要为即将到来的生产迁移而退出。

我更新了我的SVN工作目录。我在同一个目录中创建了一个git仓库(忽略.svn等)。我做了git branch map-dev为我的(地图相关的)子项目创建开发分支。我做了git checkout master回到SVN-synced分支,并编辑这些文件来取出我的工作。一旦我的项目的早期部分不再可见,我就承诺将git(评论“地图搜索的东西呈现为不可见”)提交给SVN,并将SVN内容推送到分段。所以现在在分段/测试服务器上有什么东西没有我的东西和他所有的,这很好。

几天后,我开发了map-dev分支,我的同事检查了一些SVN的东西,它并没有真正影响我在做什么,但我想保持同步用。

I git checkout master。我svn up。 I git commit -a,注释“来自SVN的更新”。

现在我想,好吧,rebase map-dev跟那些主人的变化吧?所以我这样做,我解决了一两个冲突,而且一切都显得格格不入。然后我注意到我在master上所做的更改称为“地图搜索呈现不可见”,这是目前的情况。在我的开发分支上没有更近的提交,它只是在回购首次提交时的情况。

所以。我用git revert --hard ORIG_HEAD来回到rebase之前的位置。我想要的是我刚刚在master中输入的CSV更改,但不是让我的作品隐形的提交。我应该怎么做?

回答

1

我建议合并他的代码到您的Dev分支:

git checkout map_dev 
git merge master 

然后恢复你的承诺是删除代码:

git revert <sha1> 

哪里是的SHA1的承诺,从删除您的代码master。现在你的map_dev分支中会有他的代码,减去你的清理。当你到达那里时,它会使你的代码更容易地合并到master中。

编辑:或者,它可能会更容易(导致一个更清洁的合并),如果你做更多的事情是这样的:

git checkout master -b temp 
git revert <sha1 of code removal> 
git checkout map_dev 
git merge temp 
git branch -d temp 

这将使代码去除还原在你的分支上,这可能会导致更少的合并冲突。我不能肯定地说。

+0

谢谢!每次我引入SVN更新时,我需要这样做吗?因为这将继续发生。 – 2011-03-30 14:03:28

+0

之后,你应该能够将'master'合并到'map_dev'中,而不需要经过所有额外的步骤。那些步骤是从'master'中删除您的代码删除提交,不应该再次执行。 – Jonathan 2011-03-30 14:05:07

+0

...因为它的恢复将在合并提交中的map_dev的顶端。得到它了。 – 2011-03-30 14:10:40