0

我有一个裸 git 存储库,用于在 linux 机器上推送和拉取(我们将裸 git 存储库称为远程originlinux)。从我的具有originlinux作为远程的工作存储库中,我推拉,直到最后我决定把它放在 github 上。我在他们的 web gui 上添加了 github 的存储库,并使用后面的命令在我的工作存储库中添加远程存储库(我们称之为远程origingithub),然后git remote addgit pull --rebasegit push(在推送之前拉,因为不允许我简单地推送到新创建的 github 存储库而没有得到其中之一:'提示:更新被拒绝,因为您当前分支的尖端落后'。我认为这与他们创建自述文件的选项)。这里的问题是,执行这些步骤后,originlinux存储库与origingithub完全不同步即使它们具有完全相同的提交并且从相同的确切工作存储库推送到存储库。有人可以详细解释为什么会发生这种情况,以及我可以采取哪些不同的措施来防止这种情况发生,而无需重新排序我创建远程存储库的方式?看起来我正在使用的工作流程或操作顺序在 git 领域没有意义,但是您如何在一个工作副本上保持多个远程存储库同步?

谢谢!

4

1 回答 1

1

这两个存储库没有相同的提交。

当您这样做时git pull --rebase,您重写了项目的整个历史记录,以便每个修订版都包含该自述文件。所以历史中的每个提交都会有一个不同的 SHA1 标识符。

有几种方法可以让您从中恢复。

首先,您可以恢复本地存储库的状态以匹配该状态或您的第一个(非 github)远程。这将消除您在 github 上创建的自述文件(如果需要,您可以将其复制到其他位置并稍后将其添加回 git),以及您尚未推送到第一个远程的任何更改(包括尚未承诺)。

git reset --hard originlinux/master
git push -f origingithub

那里的-f选项会导致强制推送,即使这正在删除一些提交。这是一般情况下应该避免的事情,但有时是必要的,例如在这种情况下。

另一种选择是强制推送到您的第一个遥控器,接受由变基引起的新历史。

git push -f originlinux

如果您提到的三个存储库是唯一的,那么您使用哪种方法并不重要。如果还有其他存储库,您可能想要尝试确定哪个版本的历史更广为人知,并保留该版本。

于 2013-02-01T20:06:38.123 回答