如何安全地删除原始仓库中的合并提交?

时间:2018-01-22 04:55:26

标签: github

我必须删除推送到原始仓库的最后两次提交,其中一次是合并提交。我想删除repo中的更改并将它们保存在我的计算机上。 当我做的时候

    git revert -m 1  075cc2f 

它为我的提交历史添加了一个恢复提交,我的075cc2f提交仍然存在。 当我做的时候

    git push origin +HEAD^:master

提交已从历史记录中完全删除。 但是,当事情合并第二次提交时,只有在我之前推送的人的提交才会删除它。克隆回购时,我们都有一些版本“v”。他将他的承诺推到原始仓库,项目版本变为“v + 1”。我仍然使用版本“v”并通过以下方式合并项目:

    ➜git add .
    ➜git commit -am "My commit»
    ➜git pull  
    subl -w: subl: command not found
    error: There was a problem with the editor 'subl -w'.
    Not committing merge; use 'git commit' to complete the merge.
    ➜git commit -am "My commit»
    ➜git pull  
    Already up-to-date.
    ➜git push -u origin master

当我使用合并提交时:

    git push origin +HEAD^:master

只有在我之前推送的人的提交才会被删除。 现在我想完全删除历史记录中的合并提交而不删除其他人的推送。

There is another way to do this

  

您可以按照以下步骤恢复不正确的提交或将远程分支重置为正确的HEAD /状态。

     
      
  1. 将远程分支签出到本地仓库。
      git checkout development
  2.   
  3. 从git log中复制提交哈希(即错误提交之前提交的id)   git log -n5

         
        

    输出:

             

    提交7cd42475d6f95f5896b6f02e902efab0b70e8038“合并分支'错误 - >>>提交'进入'开发'”
        commit f9a734f8f44b0b37ccea769b9a2fd774c0f0c012“这是一个错误的提交”>
        提交3779ab50e72908da92d2cfcd72256d7a09f446ba“这是正确的>>>提交”

      
  4.   
  5. 将分支重置为上一步骤中复制的提交哈希   git reset <commit-hash> (i.e. 3779ab50e72908da92d2cfcd72256d7a09f446ba)

  6.   
  7. 运行git status以显示属于&gt;的所有更改&GT;错误的提交。
  8.   
  9. 只需运行git reset --hard即可还原所有这些更改。
  10.   
  11. 强制将您的本地分支推送到远程,并注意您的提交&gt; &GT;历史是干净的,就像污染之前一样   git push -f origin development
  12.   

process

但同样,它不仅会删除合并提交,还会删除其父级

before after

       commit b142e1ed9 has 2 parents f4cc23a + 2537c51 

0 个答案:

没有答案