Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git将所有父项提交到远程(即重写远程历史记录)_Git_Git Filter Branch - Fatal编程技术网

Git将所有父项提交到远程(即重写远程历史记录)

Git将所有父项提交到远程(即重写远程历史记录),git,git-filter-branch,Git,Git Filter Branch,一点背景: 我最近使用cvsimport从CVS迁移到Git。现在有了一个由gitolite管理的公共(裸)存储库,人们可以在其中推动本地更改。 然后,我发现旧CVS历史记录中的许多标记并没有完全导入。我可以通过使用cvs2git(本地)从CVS重新进行迁移来修复这个问题,并将我的第一次回购的分支头嫁接到cvs2git(本地)给出的新树上。我现在有了一个完整的树,它的历史记录比以前更好,其中所有分支的头都具有与当前远程上相同的哈希值(我使用了grafts和filter branch,如下所示:)

一点背景: 我最近使用cvsimport从CVS迁移到Git。现在有了一个由gitolite管理的公共(裸)存储库,人们可以在其中推动本地更改。 然后,我发现旧CVS历史记录中的许多标记并没有完全导入。我可以通过使用cvs2git(本地)从CVS重新进行迁移来修复这个问题,并将我的第一次回购的分支头嫁接到cvs2git(本地)给出的新树上。我现在有了一个完整的树,它的历史记录比以前更好,其中所有分支的头都具有与当前远程上相同的哈希值(我使用了grafts和filter branch,如下所示:)

我现在想做的是将这些更改推送到远程。当然,
gitpush
返回所有内容都是最新的:我不知道如何推送重新编写的历史。 由于refs匹配,
git push-f
还返回所有内容都是最新的

此外,我当然希望其他开发人员几乎没有注意到某些东西发生了变化。他们下次拉时应该只看到更新的历史记录(如果他们必须重新克隆,我也可以)。我假设他们在分支机构负责人之前没有基于承诺进行任何工作(我知道,否则会是一个大混乱)

编辑:为了澄清,这里是两个存储库上的
git rev list HEAD
的输出(摘录)。粗体的提交是我进行嫁接的地方。我想用本地存储库中的内容覆盖远程存储库中低于该点的所有内容

本地回购:
fff881c238fff8b0057be8dab494ec5a6aa181d9
ac513b5596cca48dd885a969fdcc4a2b49e507d0
1b199d8e4ac29e4bd39ff96059031cf9b1390609
427837c98a14f28bc2e5d91fcf89e954b3bb3e77
0d9e58cc4f6a0107c718c689e24353d4ce59ab8c

远程回购:
6AD634DA6E5ACDA43E6CF0919E8F494C08AC862
bd32b7c9b0ae4faea51720b98586f89972b52e58
3778CE4FF85F269E2287D57C7AEC3ECEFAC135A
d3c343f3498d1d82b680be2ffc2c5e05c14a3d4c
a5d200b99f31a005cc8312d0a23a79d4014a2156
8b90afbbb06bea062d26b520c42c068ef96e5db7
fff881c238fff8b0057be8dab494ec5a6aa181d9
19cf091efb12413027941ac893ea8d503fea415e
efbed577d5986beef45ba0f9a2560f4b1ca120fc
BBEC686E3389ABE067792A3D71C236B98FFC111
5B56665E48B3AF51A25D0C9D2342D04E730AA16
2ce095b0ed92f22baf74e728bda07bfded5a4e7b


看起来您的本地分支没有设置为跟踪远程分支

您需要在分支中设置远程跟踪(选中
分支
命令的
--set upstream
选项),然后执行裸
git推送
;或者单独推送每个分支,在push命令中指定分支名称:
git push——为每个分支设置上游
,同时签出该分支


我希望这有帮助。

谢谢。分支已跟踪正确的远程分支。我进行了三次检查,并按照您的建议执行了显式的“git push--set upstream”,但我始终会收到“Everything-Update”消息。您可以
git fetch origin
,然后
git branch-va
。后者将列出您的repo知道的所有分支引用,以及每个头提交id。然后您可以比较本地头和远程头。从git对push命令的响应来看,它们似乎已经是一样的了。是的,没错。脑袋都一样,这就是我想要的。不过,其他一切都不一样——这正是我想推到遥控器上的。有效地重写了遥控器的所有历史,除了头部。你所说的“其他一切都不同”是什么意思?如果更改分支头之前的任何提交,则该分支头的提交id将更改,这是无法避免的。。。看起来你刚刚将所有“旧”承诺导入了新回购协议,分支机构负责人被重置;您的本地提交和分支现在无法访问,最终将被删除。不,我在旧头(我希望保留)和这些头的新父级(我希望更改)之间进行了移植。分支机构的头没有复位。当然,当我过滤分支时,来自旧历史的提交被销毁。这就是我所做的: