我使用 git-svn 来保存共享 Subversion 存储库的克隆。最近有人在我编辑该修订后编辑了修订的提交消息(这个SO 问题)git svn fetch
。如何更正我的 Git 克隆以获得正确的提交消息?
我曾期望git svn reset
随后git svn fetch
重新获取此提交并更新内容,让我只需要修复我的本地分支,但这实际上似乎并没有做任何事情;git svn fetch
不会重新获取我重置的提交。
(是的,我认为更改提交消息是个坏主意,但这不是我可以控制的。)
更新:我尝试了 sleske 建议的过程(实际上,我在提出问题之前已经尝试过,但我只是再次尝试以防万一),但没有运气。我得到如下输出:
me_and@centos ~/code ((358a2dd...)) Fri 16 Jan 15:31:27
$ git svn reset -p 55102
r55094 = 25d126219f7eeddfc7d0842704c7efcc0443dd70 (refs/remotes/origin/branchname)
me_and@centos ~/code ((358a2dd...)) Fri 16 Jan 15:33:06
$ git svn fetch
me_and@centos ~/code ((358a2dd...)) Fri 16 Jan 15:33:08
$
没有输出git svn fetch
(或者自从我上次运行它以来是否有提交,但它只是获取新的提交,而不是重新获取旧的提交),特别rereading
是在 sleske 的示例中没有消息。
如果它是相关的,我正在使用 Git v2.0.4。
更新 2:以下略作编辑.git/config
:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[svn-remote "svn"]
url = http://server/repos/repo
fetch = trunk:refs/remotes/origin/trunk
branches = branches/*:refs/remotes/origin/*
tags = tags/v10/*:refs/remotes/origin/tags/*
tags = tags/v11/*:refs/remotes/origin/tags/*
tags = tags/v12/*:refs/remotes/origin/tags/*
tags = tags/v13/*:refs/remotes/origin/tags/*
我不会发布 的完整输出git branch -avv
,因为它有很多,但这就是它变得非常有趣的地方,所以我将发布我所做的所有事情的列表:
我有一个分支的结帐,而不是有错误的分支。运行
git svn reset
没有区别:remotes/origin/branchname
继续指向最近的提交。不出所料,git svn fetch
什么都没做。我检查
remotes/origin/branchname
并git svn reset
再次运行。这有效:remotes/origin/branchname
指向 duff 提交的父级。我跑了
git svn fetch
。这完全没有做任何事情:没有提交被提取并且remotes/origin/branchname
没有移动。我在 Subversion 存储库的那个分支上创建了几个虚拟提交(一个添加了一个空文件,下一个又删除了它),然后运行
git svn fetch again
.这是真正奇怪的地方:没有重新获取 duff 提交。相反,提取从我添加虚拟文件的提交开始,在该过程中报告了“索引不匹配”。
git show
在添加虚拟文件的提交上运行会显示我重置到的提交和虚拟提交之间的所有差异.现在,运行
git log --graph --decorate --pretty=oneline --abbrev-commit HEAD origin/branchname
看起来像这样:* 7b12bbc (origin/branchname) Remove dummy file * 730c2ab Add dummy file # But `git show 730c2ab` includes the diffs between b89af06 and 93920f9 as well | * 93920f9 (HEAD) Uninteresting commit | * 91c7163 Uninteresting commit | * ce51022 Commit with the changed commit message |/ * b89af06 Uninteresting commit
请注意,除了 之外
HEAD
,现在没有任何内容指向此分支上的某些提交。
我很快得出结论,至少这种行为中的一些只是git svn
. 当然,我在上面第 4 点看到的事情根本不应该发生,至少根据我的理解。