git push force后删除了提交

时间:2017-05-06 11:12:53

标签: git github merge push

我在github分叉回购。我将我的fork repo与生成的repo同步,创建了一个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

认为这应该强制从上游主分支进入我的本地主分支。

问题是我误导了,似乎我的分叉仓库的状态已经被推到了远程上游分支上,所以我丢失了上游远程分支上的所有提交,这个曾经超前于我的实际状态分叉回购。如何恢复上游远程分支的实际状态?

1 个答案:

答案 0 :(得分:3)

你刚刚做的是用你当地的历史取代远程回购历史,而你却想做相反的事情。

你应该做的是:

upstream/master

但是,由于https://api.github.com/repos/<user>/<repo>/events已消失,请检查您是否可以在当地git reflog中看到它。

如果没有,我之前提到过,GitHub会跟踪#34; Does github remember commit IDs?&#34;中的推送事件:通过卷曲git reset --hard old_sha1 git push --force upstream master:master 网址并查找推送事件,您可以找到提交在你自己之前推到掌握。

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

getHeroes(): Promise<Hero[]> {
  return this.http.get(this.heroesUrl)
           .toPromise()
           .then(response => response.json().heroes as Hero[])
           .catch(this.handleError);
}