【问题标题】:Revert git remote accidentally pushed repository changes恢复 git remote 意外推送的存储库更改
【发布时间】:2016-10-14 20:47:43
【问题描述】:

如何从远程源中删除意外推送的存储库?

在将两个具有自己历史记录的独立存储库推到那里之前 例如:

Repo1:Commit1--Commit2--Commit3

Repo2:Commit1--Commit2

在添加将 Repo1 存储库引用到 Repo2 的附加远程并将所有 Repo2 更改推送到 Repo1 远程之后,Repo1 开始看起来像这样:

回购1: Repo2Commit1--Repo2Commit2-- --Repo1Commit1--Repo1Commit2--Repo1Commit3

所以它显示为一个主分支,具有两个相互不相关的独立提交历史序列。

此外,git log 不显示所有提交,它只显示一个独立序列的历史记录。

有没有办法从 Repo1 恢复 Repo2 提交。所以它看起来和以前一样,例如:

Repo1:Commit1--Commit2--Commit3

有什么想法吗?

【问题讨论】:

  • 一个分支不可能有两个独立的提交历史序列。您使用什么命令将所有 Repo2 更改推送到 Repo1
  • git remote add ... git push
  • git remote add 不会推送任何内容。我想您对两个远程主分支感到困惑?如果您不需要 repo2 遥控器,请尝试使用 git remote rm repo2 将其删除。
  • @fracz 在将任何更改推送到 Repo1 之前,我已将 Repo1 作为远程添加到 Repo2 并在 Repo2 上执行 git push Repo1。结果,我在 Repo1 中看到了两个独立的序列。请注意,在 Repo1 中只有一个遥控器用于获取和推送

标签: git git-remote


【解决方案1】:

您会看到两个独立的序列,因为这些存储库是“不相关的”——不是同一个分叉。

git reflog on Repo2 在这种情况下可能会有所帮助。

只需将 Repo2 克隆到另一个目录并在那里运行git reflog。您将看到对存储库进行的顺序更改。之后,您可以硬重置为想要的提交(reflog 中的历史记录包含每个更改的哈希)并强制将其推送回远程 Repo2。

但我不确定你想要完成什么。因此,请务必备份两个存储库。

【讨论】:

  • Repo2 很好,不需要任何更改,但 Repo1 需要。 git reflog 仅在本地存储库中显示更改,但问题是远程存储库 Repo1 具有额外的不相关历史记录,在 SourceTree 中可见但在 Web 或任何 git 命令中不可见。所以目的是从 Repo1 中删除 Repo2 历史记录。此外,提交序列是不相关的,并且彼此之间没有联系。
  • 如果您创建一个新的远程存储库并尝试将您的分支从 Repo1 推送到其中呢?它可能会解决问题,似乎您只有本地不相关的历史记录。请记住,您只需要推送想要的分支而不是运行git push --all 到目前为止,我不知道如何从历史记录中删除不相关的提交。
猜你喜欢
  • 2014-05-09
  • 2016-06-27
  • 2021-04-14
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 2014-03-15
  • 2013-08-28
相关资源
最近更新 更多