Linux 具有多个遥控器和操作顺序的git工作流
我有一个裸git存储库,我使用它在linux机器上推送和拉出(让我们称之为裸git存储库remote originlinux)。从我的工作存储库中,我将originlinux作为远程设备推拉,直到最后我决定将其放在github上。我在他们的web gui上添加github的存储库,并使用Linux 具有多个遥控器和操作顺序的git工作流,linux,git,github,Linux,Git,Github,我有一个裸git存储库,我使用它在linux机器上推送和拉出(让我们称之为裸git存储库remote originlinux)。从我的工作存储库中,我将originlinux作为远程设备推拉,直到最后我决定将其放在github上。我在他们的web gui上添加github的存储库,并使用git remote add命令,然后使用git pull--rebase,然后使用git push将远程存储库添加到我的工作存储库(让我们调用远程origingithub)(先推后拉,因为我不允许只推到新创建的
git remote add
命令,然后使用git pull--rebase
,然后使用git push
将远程存储库添加到我的工作存储库(让我们调用远程origingithub)(先推后拉,因为我不允许只推到新创建的github存储库而不获取以下信息之一:“提示:更新被拒绝,因为当前分支的提示已过期”。我想这与他们创建自述文件的选项有关)。问题是,在执行这些步骤后,originlinux存储库与origingithub存储库完全不同步,即使它们具有完全相同的提交,并且是从同一个工作存储库推送到的。请有人详细解释为什么会发生这种情况,以及我可以采取哪些不同的操作在不重新排序如何创建远程存储库的情况下防止这种情况发生?我使用的工作流程或操作顺序在git land中似乎没有意义,但如何在一个工作副本上保持多个远程存储库的同步
谢谢!这两个存储库没有相同的提交 当您执行git pull--rebase时,您重写了项目的整个历史记录,以便每个修订都包含该自述文件。因此历史记录中的每个提交都将具有不同的SHA1标识符 有几种方法可以让你从中恢复过来 首先,您可以还原本地存储库的状态,使其与状态或第一个(非github)远程存储库相匹配。这将消除您在github上创建的自述文件(您可以将其复制到其他位置,并在需要时将其添加回git),以及您没有推送到第一个远程存储库的任何更改(包括尚未提交的更改) 那里的
-f
选项会导致强制推送,即使这会删除一些提交。这通常是应该避免的,但有时是必要的,例如在这种情况下
另一种选择是只对第一个遥控器进行强制推送,接受由重基引起的新历史记录
git push -f originlinux
如果您提到的三个存储库是唯一的存储库,那么您使用哪种方法应该无关紧要。如果还有其他存储库,您可能需要尝试确定哪个版本的历史更广为人知,并保留该版本
git push -f originlinux