Git 使用不同的哈希值协调提交

Git 使用不同的哈希值协调提交,git,Git,绘图:我有一个本地develop和master分支develope比master早约90次提交,从大约6个月前开始 我运行了一个git filter分支-f--索引过滤器'git rm--force--cached--ignore unmatch media/*'--all命令,在两个分支上重写了比我预期的更多的git历史记录。由于命令的作用,这实际上导致了大量git操作,这使得我的git reflog毫无用处 我用一个简单的git重置--hard origin/master轻松地恢复了mast

绘图:我有一个本地
develop
master
分支
develope
master
早约90次提交,从大约6个月前开始

我运行了一个
git filter分支-f--索引过滤器'git rm--force--cached--ignore unmatch media/*'--all
命令,在两个分支上重写了比我预期的更多的git历史记录。由于命令的作用,这实际上导致了大量git操作,这使得我的
git reflog
毫无用处

我用一个简单的git重置--hard origin/master轻松地恢复了
master
分支,但是我的
develope
分支状态非常糟糕

现在,很明显,
master
develope
之间的提交散列不匹配,这使得git认为我有无数个提交要推送,还有无数个提交要从我的
remote/develope
拉送(应该有0个提交要拉,有大约90个提交要推送)

有没有办法让git“协调”来自
master
develope
的所有提交?应该是这样的:

for commit in commits_in_master:
    tmp = search_by_commit_autor_and_date_and_message_in_develop(commit)
    tmp.hash = commit.hash
    tmp.save()
编辑:

如果我所问的是不可能的,我是否可以(以某种方式)仅提取未推送到
origin/develope
的~90个提交,然后
git reset--hard origin/develope
my
develope
分支,然后应用这些~90个提交

git fetch -u . '+refs/original/*:*'
git reset --hard

将在筛选器分支之前将所有内容恢复到其提交状态。

在运行
筛选器分支之前,Git将创建当前所有分支头的备份。它们存储在
refs/original
名称空间中。您可以重置分支以再次指向旧的头(在重置分支之前,备份完整的存储库不会有什么坏处。与其抱歉,不如安全):


original
名称空间的布局与常规refs目录相同。

运行
fetch
得到的结果是
zsh:未找到匹配项:+refs/original/*:*
。您已将zsh配置为拒绝可能是通配符但不匹配的内容。你可以引用它,这样zsh就不会像那样对你进行全面调查,我在辩护中编辑过。事实上,zsh的配置就是问题所在。无论如何,这似乎并没有解决问题,因为git仍然认为我有大量的提交要推/拉。我得到
致命:无法强制更新当前分支。
这意味着
develope
是您当前的分支(您已签出的分支)。您可以
git reset--hard refs/original/refs/heads/developer
而不是
git branch-f
,只要您不介意删除索引和工作树内容。名称/引用有问题<代码>致命:模棱两可的参数“refs/original/refs/heads/develope”:未知修订或路径不在工作树中。
@alexanderst抱歉,我的错误。前导的
refs
不应该在那里(它已经由Git隐式添加)。更新了答案,现在应该可以了。
git branch -f develop original/refs/heads/develop