如何撤消"git push --mirror"?

hyp*_*not 17 git github

在git/github项目中,我正在分支机构工作.推动后,它说:

git push
To git@github.com:...
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:...'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.
Run Code Online (Sandbox Code Playgroud)

我试图解决这个问题,在Googleing上我提出了这个问题:

git push --mirror
Run Code Online (Sandbox Code Playgroud)

我发出了以下命令,现在看来我已从服务器中删除了很多分支.

Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:...
 - [deleted]         develop
 + 797beee...bafbc50 master -> master (forced update)
 - [deleted]         milestone
 - [deleted]         robot
 - [deleted]         strategy
 * [new branch]      origin/HEAD -> origin/HEAD
 * [new branch]      origin/develop -> origin/develop
 * [new branch]      origin/master -> origin/master
 * [new branch]      origin/milestone -> origin/milestone
 * [new branch]      origin/robot -> origin/robot
 * [new branch]      origin/robot_simulator -> origin/robot_simulator
 * [new branch]      origin/strategy -> origin/strategy
 * [new branch]      origin/vision -> origin/vision
Run Code Online (Sandbox Code Playgroud)

你能告诉我发生了什么吗?我怎样才能解除我所做的改变?(如果我删除了那些分支)

seh*_*ehe 12

你推到了默认的推送目标git@github.com.这意味着,git@github.com是您的源代码库中的遥控器.

这意味着,在推送之后从服务器删除的引用仍然在本地远程.不要更新遥控器(!).

通过执行验证

git branch -a
Run Code Online (Sandbox Code Playgroud)

你从(本地)推出的那一面.

它可能会显示从远程服务器删除的引用.

[未完待续]

你可以这样做:

for-each-ref refs/remotes/origin | while read sha type name
do 
    git branch "rescue_$(basename "$name")" "$sha"
done
Run Code Online (Sandbox Code Playgroud)

在本地恢复分支机构.它们将被命名为带有前缀rescue_的预防措施(如果您获得有趣或相互矛盾的引用名称).

替换origin为遥控器的名称


测试脚本

如果你想在受控环境中测试程序,这里我的方法浓缩到最小步骤(在空目录中执行,例如/ tmp/work)

git init A; (cd A; touch test; git add test; git commit -m initial; git branch test1; git branch test2; git branch test3)
git clone A B
(cd B; git push --mirror origin; git branch -a)
cd A
git for-each-ref refs/remotes/origin | while read sha type name; do git branch "rescue_$(basename "$name")" "$sha"; done
git branch -a
Run Code Online (Sandbox Code Playgroud)

注意在这个版本中,我是如何进入A- 这将是你的github回购.您可以git clone --mirror git@github.com:... local_rescue为了获得合适的本地版本.

我建议你在试用之前尽量与程序达成协议.在此过程中备份您的存储库永远不会受到伤害.