如何从错误的git push -f原始主人中恢复?
-
09-10-2019 - |
题
我刚刚使用错误的来源来使用我的项目 --force
选项。
可以恢复吗?我知道所有以前的分支都已使用 -f
选项,所以我可能已经搞砸了以前的修订。
解决方案
Git通常不会丢掉任何东西,但是从中恢复仍然可能仍然很棘手。
如果您有正确的源,则可以将其推入遥控器 --force
选项。除非您告诉您,否则Git不会删除任何分支机构。如果您实际上失去了承诺,请看一下 这个恢复提交的有用指南. 。如果您知道所需的提交的sha-1,那么您可能还可以。
最好的事情要做:备份所有内容,看看您本地存储库中的内容。如果可能的话,请在遥控器上执行相同的操作。利用 git fsck
看看您是否可以恢复事物,最重要的是 别跑 git gc
.
首先,切勿使用 --force
选项,除非您真的是真的。
其他提示
如果您知道提交哈希,这很容易,只需重新创建您的分支机构即可。
5794458...b459f069 master -> master (forced update)
删除远程分支:
git push origin :master
然后使用以下命令重新创建您的分支:
git checkout 5794458
git branch master
git push origin master
解决方案已经提到 这里
# work on local master
git checkout master
# reset to the previous state of origin/master, as recorded by reflog
git reset --hard origin/master@{1}
# at this point verify that this is indeed the desired commit.
# (if necessary, use git reflog to find the right one, and
# git reset --hard to that one)
# finally, push the master branch (and only the master branch) to the server
git push -f origin master
我做了同样的事情,同时仅撤消一个文件的最后一次推动。最终回到了存储库的原始状态。我在Linus上使用了Linus的Git命令。幸运的是,该副本仍然完好无损。
我所做的就是(在疯狂地制作了更多的本地仓库副本之后):
git add .
git status
(它说,原籍/主人在68次提交的领先地位,很好...所有这些都是我删除的所有提交)
git remote set-url origin <GIT_SSH_URL>
git push
一切都按照我进行有力的推动之前的方式恢复了。要记住的最重要的事情是不要进行git检查。在您强行推动之后。但是最好的做法是禁用推送选项。我再也不会使用它了。学到了我的教训!
恢复丢失的承诺甚至弄清楚丢失的提交的另一种方法,如果以前的推动不是来自本地仓库,则是查看您的CI机器。
如果您的工作在每个提交(或连续的一系列提交)之后测试主分支,您应该拥有,您可以查看其最后测试的内容。那就是您需要还原的承诺。
CI机器甚至可以保留回购的本地克隆,您可以从中执行此恢复。
资料来源:可能 连续交付:可靠的软件通过构建,测试和部署自动化(Addison-Wesley签名系列(Fowler))发布
在这里您可以阅读决策 https://evilmartians.com/chronicles/git-push---force-and-how-how-to-deal-with-it
第二个帮助了我。我做错了这些命令
1) (some-branch) git pull -> correct command was git pull origin some-branch
2) (some-branch) git push -f origin some-branch
在这些命令之后,我输掉了三个提交。为了恢复它们,我看着我错误地“ git拉”的终端,看到了在那里的输出
60223bf ... 0b258eb Some-Branch-> Origin/Some-Branch
第二个哈希0B258EB正是我所需要的。所以,我接受了这个哈希并制作命令
git push --force origin 0b258eb:some-branch