这个git命令是否将github存储库恢复到过去的某个点?

时间:2016-07-22 19:22:14

标签: git github

Person A将他的文件推送到github存储库,然后B人将他的文件推送到同一个github存储库。

不喜欢B的提交,并将github存储库恢复到B推送前的状态。声称使用以下命令来完成

git push origin master -f

我可能会误解命令的某些部分,因为我不熟悉这些东西。

自推出以来,A在本地存储库中没有任何改变。

我的问题是

  • 为什么我不能在github存储库的历史中找到B的提交?
  • 为什么A只有一次提交,就像B推送之前的那样?
  • A使用的命令是什么?将所有东西还原到B推进之前的点?

感谢。

2 个答案:

答案 0 :(得分:5)

这可能发生了什么:

  • 最初,在github存储库中, master 分支指向提交1。
  • B推动他的改变。这包括两件事:
    • 将他的提交(提交2)发送到远程存储库
    • 告诉远程服务器 master 分支现在不再指向提交1,而是提交2。
  • A使用git push origin master -f,告诉远程存储库将分支引用再次移回提交1(或者提交给当前分支的任何内容)指向)。

现在,回答你的问题:

  

为什么我无法在github存储库的历史记录中找到B&#39的提交?   为什么A只有一次提交,就像B推送之前的那样?

B的提交仍然存在,但它不再被任何分支引用。当git log master 上时,您只能看到此分支指向的提交及其所有祖先。任何其他提交1或与提交1无关的提交都不会显示。

我找到列出孤立提交的唯一方法是在最近签出该提交的计算机上执行git reflog

  

A使用的命令是什么?将所有内容还原到B推送前的那一点?

见上面的第三个子弹。

答案 1 :(得分:2)

-f标志代表武力。我只能猜测,但可能发生的事情是,A还没有B改变,所以为了#34;还原" B的变化,所有A必须做的就是强制推动。

  • B&#39>提交不存在于日志中,因为强制推送了一个完全没有更改的存储库
  • 见上一页
  • 不完全是。它本身并没有回复东西,但是为了消除像A这样的历史,你最终需要使用强制推力。