【问题标题】:Recovering file history after a forced push强制推送后恢复文件历史记录
【发布时间】:2016-03-18 16:54:24
【问题描述】:

我刚刚尝试将本地计算机上某个存储库的文件迁移到另一个目录,但似乎失败了。

将源文件复制粘贴到新文件夹后,我通过以下操作尝试在新目录中执行以下操作并提交到原始 GitHub 存储库:

git init
git add .
git commit -m 'migration'
git remote add origin https://github.com/UN/REP.git
git push origin master

这(我现在已经习惯了 git)给我一个错误:

 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/UN/REP.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

不知道为什么会这样,我只是天真地强行推动

git push -f origin master

现在,所有文件都没有保留其编辑历史记录,因为存储库仅显示一个(强制)提交。

有什么方法可以取回此存储库的编辑历史记录?

我阅读了一些关于在/撤消强制推送后恢复的问题,但 1)我不知道他们在说什么,2)我认为我可能会因为我仍然拥有旧的 .git 文件夹而得救在我迁移之前使用的旧文件夹中。

【问题讨论】:

    标签: git github git-push


    【解决方案1】:

    不幸的是,据报道,您无法在遥控器上使用git refloggit can I view the reflog of a remote?

    如果你有旧的 .git 文件夹,我认为你应该被保存。尝试在包含 .git 文件夹副本的文件夹中运行 git reset --hard

    我刚刚用我的一个仓库尝试了这个。我只复制了 .git 文件夹并将其复制到一个空白文件夹中。然后我打开一个 shell 并导航到这个新文件夹,该文件夹只包含 .git 文件夹,键入命令 git reset --hard,git 立即将我所在的最后一个分支的文件放入该文件夹中。

    编辑:基于下面的 cmets,我认为 @MichaelChirico 误解了我的回答。让我试着说得更清楚些。

    假设您的 .git 目录位于 c:\Michael\project 中。

    第一步:新建目录:c:\temp\project。

    第 2 步:打开外壳。

    第 3 步:将目录更改为 c:\temp\project。

    第 4 步:输入 ls。您应该会看到该目录包含 .git 而没有其他内容。

    第 5 步:输入 git reset --hard

    第 6 步:查看您现在在 c:\temp\project 中是否有文件。

    第 7 步:如果文件不是您想要的分支,请使用git checkout 更改分支。

    【讨论】:

    • 我认为这应该会让你重新开始工作,但是如果你也丢失了 .git 文件夹,知道是否有解决方案会很有趣。
    • 没有。只需将 .git 文件夹复制到任何空白目录,打开 shell,将目录更改为该目录,然后键入 git reset --hard。一旦您对已恢复文件感到满意,您可以再次强制推送以恢复远程上的存储库。
    • 哇!它只是删除了一堆应该被忽略的文件(我没有推送到 github 的目录中的文件)......
    • 对于初学者,请确保您正在制作副本而不是弄乱您的原件。我习惯在 powershell 中执行此操作,当我将目录更改为包含 .git 文件夹的文件夹时,我的命令提示符会显示我上次所在的分支的名称。 git reset --hard 使用该分支的内容填充工作目录,因此如果您将其他文件放在目录中,它们可能会被删除。
    • 我想我可能误解了你的问题。一开始我以为你说你的原始文件丢失了,但是你还有.git目录,但是根据你的cmets,我不确定是不是这样。无论如何,我建议您确保使用您的 repo 的副本,直到您确定已将遥控器恢复到需要的位置。
    猜你喜欢
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2015-01-24
    • 2021-07-28
    相关资源
    最近更新 更多