具有多个遥控器和操作顺序的git工作流程

时间:2013-02-01 16:51:12

标签: linux git github

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

当您执行git pull --rebase时,您重写了项目的整个历史记录,以便每个修订版都包含该自述文件。因此,历史记录中的每个提交都将具有不同的SHA1标识符。

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

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

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

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

另一个选择就是强行推动你的第一个遥控器,接受由rebase引起的新历史。

git push -f originlinux

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