16

简短的问题:git-svn 相当于svn up -r r1130只更新到编号的提交(带有 svn 编号)是什么?

我正在使用 git-svn,因此我既可以使用 git,也可以管理团队 svn 存储库的(许多)本地分支。我有一个软件版本,我破解了它可以与特定的硬件设置一起使用。自从我上次使用它以来,svn repo 已经超越了这项工作的一个稳定的好点。我想将本地分支更新为代表稳定提交的编号修订。我可以在 svn with 中做到这一点svn up -r r1130,但我更喜欢 git。

我一直忘记过去我是如何做到这一点的,并且发现自己正在搜索 SO 和帮助页面试图找到最佳方法。也许我错过了一个措辞不同的问答?

在干净的树上检查旧版本很容易,但是当我在树的顶部进行提交时,“倒带头以在其上重放你的工作......”我通常喜欢的部分意味着在添加更改之前,我将前往树中的某个点!

现在,我打算git svn rebase然后以交互方式 rebase 以退出我不想要的提交,但我很难相信这是最好的,甚至是这样做的好方法。

4

3 回答 3

19

我更喜欢rebase,因为 git-svn 无论如何都必须在dcommit. 试试这个:

git checkout `git svn find-rev r1241`  # Go to the svn version of interest
git checkout -b master_r1241           # Create a new brach matching it
git checkout hwTesting                 # Merge previously created changes
git rebase master_r1241                # rebase on top of not quite up-to-date master branch

您也可以一步完成:(总是可以使用 reflog 恢复,或者rebase --abort如果事情出现严重错误)。

git checkout hwTesting                 # Checkout feature branch
git rebase `git svn find-rev r1241`    # rebase on top of not quite up-to-date master branch
于 2012-07-06T15:43:56.783 回答
1

似乎没有办法一步到位。但是,您可以轻松找到给定 svn 修订号对应的 git commit id。试试这个:

git svn find-rev rN

其中 N 是您想要的修订号。之后,使用 git checkout 签出历史记录中的特定点。

于 2012-04-19T12:30:12.487 回答
0

我将把它留作参考,因为接受的答案提到了它。但是,请使用单线变基选项...


这是我现在正在做的事情。这次我从 r1130(问题中提到)升级到 r1241:

git checkout `git svn find-rev r1241`  # Go to the svn version of interest
git checkout -b hwTesting_r1241        # Create a new brach matching it
git merge hwTesting_r1130              # Merge previously created changes

这主要给了我我想要的东西,但是每次我更新它都会产生另一个分支。似乎应该有某种方法告诉 git 仅合并 master 上的提交,包括git svn find-rev r1241.

于 2012-05-09T04:58:26.470 回答