Rebase,但忽略了一个上游提交?

时间:2011-03-30 13:53:42

标签: git git-branch git-rebase

我正在尝试使用git进行本地工作流管理,并着眼于为我的团队提出建议。所以我想完全了解它,我正在反对一些我不理解的事情。

我进入git-land的时候,我有一个SVN存储库,让我和另外一个开发人员一起工作。我们的PM改变了项目时间表,使他的子项目几乎立即投入生产,然后在大约一个月内完成。我们都在相同的SVN仓库中开发,我的东西已经开始对用户可见,因此需要退出以进行即将进行的生产迁移。

我更新了我的SVN工作目录。我在同一目录中启动了一个git存储库(忽略.svn等)。我做git branch map-dev为我的(地图相关的)子项目创建了一个开发分支。我做git checkout master以回到SVN同步分支,并编辑这些文件以取出我的工作。一旦我的项目的早期部分不再可见,我致力于git(注释“地图搜索内容呈现为不可见”),致力于SVN,并将SVN内容推送到暂存。那么现在登台/测试服务器上的内容没有我的所有内容和所有内容,这很好。

几天后,我在我的map-dev分支机构中开发了,我的同事已经向SVN检查了一些不会影响我正在做的事情,但我想要保持同步。

git checkout master。我svn up。我git commit -a评论“来自SVN的更新”。

现在我想,好吧,在主人那些变化的情况下重新定义map-dev,对吧?所以我这样做,我解决了一两个冲突,一切似乎都很糟糕。然后我注意到我在master上所做的更改称为“地图搜索内容呈现为不可见”是当前的。我的dev分支上没有最近的提交,这就是回购首次提交时的情况。

因此。我使用git revert --hard ORIG_HEAD回到了变形前的状态。我想要的是我刚刚放入master的CSV更改,但不是让我的工作不可见的提交。我该怎么做?

1 个答案:

答案 0 :(得分:1)

我建议将他的代码合并到你的开发分支中:

git checkout map_dev
git merge master

然后还原删除代码的提交:

git revert <sha1>

master删除代码的提交的SHA1在哪里。现在,您将在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

这会将代码删除的恢复放在分支的顶部,这可能会导致更少的合并冲突。我不能肯定地说。