使用" push -f origin master'删除了所有提交。有什么方法可以恢复?

时间:2016-11-25 17:10:10

标签: git github push commit

我提交了使用' git push -f origin master'它删除了我以前的所有提交。有什么方法可以恢复它们或者至少显示我之前的所有提交内容吗?

3 个答案:

答案 0 :(得分:1)

你可以试试这个:

$ git reflog                   # show working tree, copy the last commit-hash that have all codes
$ git checkout <commit-hash>   # checkout to that commit, now you've all codes
$ git checkout -b new-master   # create a new branch named new-master & checkout.
$ git branch -D master         # delete your local master branch
$ git checkout -b master       # create master from current commit and checkout to master
$ git push -f origin master    # push all the codes to remote  

答案 1 :(得分:0)

使用git reflog查看缺少的提交。

然后,找到你想要的提交并使用git reset来重置它们。

重置已删除的提交后,使用git push origin master将更改推送到原点

答案 2 :(得分:0)

您可以使用本地git reflog或远程存储库中的reflog,找到要恢复的提交;

import java.awt.*;
public class myFrame extends Frame {

  myFrame(){
    TextField tf=new TextField(10);

    setVisible(true);
    setSize(400,400);
    setTitle("myFrame");
    setBackground(Color.red);
    add(tf);

  }
public static void main(String[] args){
  myFrame f=new myFrame();

 }  
}

reflog显示反向时间顺序的HEAD所有更改的列表。第一列中的has是执行右侧操作后HEAD的值。因此,您可以通过检查其哈希值

来查找提交哈希并检出要返回您的仓库的提交
git reflog //at local level
git reflog show remotes/origin/master // at remote level: 

从提交

创建临时分支
git checkout <commit-hash>

将其推回远程存储库。

git checkout -b new-master

但是,这将修复您的远程主服务器,但请注意您的本地主服务器仍然是您引入破坏性更改的主服务器,因此如果您不需要更改,可以使用以下命令将其删除。

git push -f origin master

或者你可能需要做一些像樱桃一样挑选丢失的所有提交。

PS:您还可以找到更适合恢复丢失提交的 git fsck