git 推力后删除的提交

deleted commits after git push force

我已经在 github 上分叉了回购协议。我将我的分叉回购与创建一个 upstream 端点的生产回购同步,以便命令 git remote -v

origin  git@github.com:some_repo.git (fetch)
origin  git@github.com:some_repo.git (push)
upstream    git@github.com:some_repo.git (fetch)
upstream    git@github.com:some_repo.git (push)

要同步,我 运行 这个

git fetch upstream;git checkout master;git merge upstream/master

但是由于大量冲突合并失败。所以我决定强制合并 运行

git push --force upstream master:master

认为这应该从上游主控 b运行ch 强制进入我的本地主控 b运行ch。

问题是我误导了,似乎我的分叉回购的状态已经被推送到远程上游 b运行ch 上,所以我丢失了上游远程 b[=29= 上的所有提交]ch,这个以前是我分叉回购的实际状态。如何恢复上游远程 b运行ch 的实际状态?

您刚才所做的是将远程回购历史替换为您的本地历史,而您的本意恰恰相反。

你应该做的是:

git reset --hard upstream/master

但由于 upstream/master 已经消失,请检查您是否可以在本地 git reflog.

中看到它

如果没有,我之前提到 GitHub 跟踪“”中的推送事件:通过 curling https://api.github.com/repos/<user>/<repo>/events url ,并查找推送事件,您可以找到在您自己之前推送到 master 的提交。

提交后,您可以将本地分支重置为它,然后再次推送。

git reset --hard old_sha1
git push --force upstream master:master