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
mydevelope
分支,然后应用这些~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