1

一点上下文:我最近使用 cvsimport 从 CVS 迁移到 Git。现在有一个由 gitolite 管理的通用(裸)存储库,人们在其中推送他们的本地更改。然后我发现旧 CVS 历史中的许多标签都没有完美导入。我可以通过使用 cvs2git(本地)从 CVS 重新迁移来解决这个问题,并将我的第一个 repo 的分支头嫁接到 cvs2git 给出的新树上(仍然是本地)。我现在有一个完整的树,其历史比以前更好,其中所有分支的头部都具有与远程当前相同的哈希(我使用了嫁接和过滤器分支,如以下答案所示:https://stackoverflow .com/a/2428339/1005470 )

我现在想做的是将这些更改推送到遥控器。当然,git push返回一切都是最新的:我不知道如何推送重写的历史。因为 refs 匹配,所以git push -f也会返回所有内容都是最新的。

此外,我当然希望其他开发人员几乎不会注意到某些事情发生了变化。他们下次拉动时应该只会看到更新的历史记录(如果他们必须重新克隆,我也可以)。我假设他们没有基于分支负责人之前的提交进行任何工作(我知道否则会一团糟)。

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

Local repo :
fff881c238fff8b0057be8dab494ec5a6aa181d9
ac513b5596cca48dd885a969fdcc4a2b49e507d0
1b199d8e4ac29e4bd39ff96059031cf9b1390609
427837c98a14f28bc2e5d91fcf89e954b3bb3e77
0d9e58cc4f6a0107c718c689e24353d4ce59ab8c
....

Remote repo :
6ad634da6e5acda43e6cf0919e8f4994c08ac862
bd32b7c9b0ae4faea51720b98586f89972b52e58
3778ce4ff85f269e2287d57c7aec3ecefabc135a
d3c343f3498d1d82b680be2ffc2c5e05c14a3d4c
a5d200b99f31a005cc8312d0a23a79d4014a2156
8b90afbbb06bea062d26b520c42c068ef96e5db7
fff881c238fff8b0057be8dab494ec5a6aa181d9
19cf091efb12413027941ac893ea8d503fea415e
efbed577d5986beef45ba0f9a2560f4b1ca120fc
bbec686e3389abe0679672a3d71c236b98ffc111
5b56665e48b3af51a25d0c9d2342d04e730aaa16
2ce095b0ed92f22baf74e728bda07bfded5a4e7b
...

4

1 回答 1

0

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

您将需要在您的分支中设置远程跟踪(检查命令的--set-upstream选项branch),然后做一个bare git push; 或单独推送每个分支,在 push 命令中指定分支名称:git push --set-upstream <remote> <remote-branch-name>对于每个分支,同时签出该分支。

我希望这有帮助。

于 2012-11-07T09:54:45.013 回答