2017-05-06 146 views
2

我在github上分叉了回购。我同步我的分叉回购与生产一个创建upstream端点,因此命令git remote -v在git push force后删除提交

origin [email protected]:some_repo.git (fetch) 
origin [email protected]:some_repo.git (push) 
upstream [email protected]:some_repo.git (fetch) 
upstream [email protected]:some_repo.git (push) 

要同步,我跑这

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

但合并与吨的冲突失败。所以我决定强制合并跑

git push --force upstream master:master

想这应该从上游主分支强行进入我的本地主分支。

问题是,我误导了,似乎我的分叉repo的状态已经推送到远程上游分支,以便我丢失了上游远程分支上的所有提交,这一个先前从实际的状态我的分叉回购。我怎样才能恢复上游远程分支的实际状态?

回答

3

你刚刚做的是用本地历史记录替换远程回购历史记录,而你的意思是做相反的事情。

什么,你应该做的是:

git reset --hard upstream/master 

但由于upstream/master走了,请检查您是否可以在本地的git reflog看到它。

如果没有,我之前提到过GitHub跟踪“Does github remember commit IDs?”中的推送事件:通过卷动url,并查找推送事件,您可以在自己的推送之前找到提交给主服务器的提交。

一旦你有了这个提交,你可以重置你的本地分支到它,然后再次推送。

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

感谢您的回应:事实上,这很奇怪,但我只是进行了一个'git add .'和'git commit ...',然后我恢复了所有9个新的提交。但有两件事很奇怪:1)如果我运行'git reset --hard HEAD ^',我倒退了9次提交。这9个提交似乎对应于1个单独提交。其次,在工作之后,删除一些文件,添加一些新的工作和提交,我试图压扁其中一些,然后我收到一条消息'警告:无法合并二进制文件:... - 错误:无法应用SHA1_commit ... '二进制文件恰好是我删除的文件。你有好主意吗 ? – Newben

+0

@Newben它可能是一个合并提交(你在你第一次拉的那个) – VonC

+0

@Newben如果可以的话,检查引用日志并重置你的分支到sha1的上游/主 – VonC