如何使用散列而不是分支名称重新设置git基址?

如何使用散列而不是分支名称重新设置git基址?,git,hash,branch,git-svn,git-rebase,Git,Hash,Branch,Git Svn,Git Rebase,我使用git-rebase--on-target-source-foo将分支foo从分支source移动到分支target。您知道是否可以使用散列值而不是像这样的分支名称(如果没有给出):git-rebase-on-ab91c-f4242-foo? 作为一种解决方法,我临时将分支名称添加到相关的提交对象中。但如果有许多分支需要重定基础,则这可能是一个pita 示例情况: ° bb42a ° ab91c ° 979c2 /° fb648 foo ° f4242 -- ° 333

我使用
git-rebase--on-target-source-foo
将分支
foo
从分支
source
移动到分支
target
。您知道是否可以使用散列值而不是像这样的分支名称(如果没有给出):
git-rebase-on-ab91c-f4242-foo

作为一种解决方法,我临时将分支名称添加到相关的提交对象中。但如果有许多分支需要重定基础,则这可能是一个pita

示例情况:

° bb42a
° ab91c
° 979c2
          /° fb648 foo
° f4242 --
° 333c9
git-rebase之后--on…

° bb42a
          /° fb648 foo
° ab91c --
° 979c2
° f4242
° 333c9
背景:
如果您使用svn服务器作为远程存储库,则说明的问题非常常见。您提交的所有对象都会被重写,因为每次您将git svn dcommit添加到svn存储库时,svn id都会被添加到svn存储库中。这会将所有其他分支与其以前的主分支分离。

确定的是:

  • git-rebase
    (不是
    git-svn-rebase
    )可以接受任何有效的提交作为参数,因此散列值可以工作
  • git svn的警告您:
避免git存储库和分支之间的所有
git克隆
/
pull
/
merge
/
push
操作。
建议在git分支机构和用户之间交换代码的方法是
git格式补丁
git am
,或者只是“向SVN存储库提交数据”

因此,您需要确保不会在SVN同步分支中引入提交,因为SVN同步分支不知道该提交,并且会这样报告。

(SQ问题“”中的情况正好相反)

尝试使用哈希值时,您收到了什么错误消息?git rebase手册页确实提到“可能是任何有效的提交,而不仅仅是现有的分支名称。”我只在svn场景中尝试过这一点。我只是在本地git存储库中尝试了一下。它起作用了。明天我会和svn一起试试。有一条类似“找不到索引对象”的错误消息,但我必须重新生成它以准确地说明消息。好的,我明天再检查;)请注意,
git svn rebase
git rebase
大不相同。我昨天可能做错了什么。使用散列值的Git重基是有效的。谢谢你。@JJD:太好了。在弹出任何错误消息时,将命令和错误消息复制到一些临时文件文本中总是很有用的。它可以在像这样的问题上派上用场;)