0

我正在尝试将 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 中的这些变化进行rebase ,对吧?所以我这样做了,我解决了一两个冲突,一切看起来都很笨拙。然后我注意到我提交的master名为“地图搜索内容呈现不可见”的更改是最新的。在我的 dev 分支上没有更新的提交,这就是第一次提交 repo 时的情况。

所以。我曾经git revert --hard ORIG_HEAD回到 rebase 之前的位置。我想要的是我刚刚放入的 CSV 更改,master而不是使我的工作不可见的提交。我该怎么做?

4

1 回答 1

1

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

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

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

于 2011-03-30T13:58:29.263 回答