删除推送提交但保留本地更改

时间:2018-02-09 18:12:46

标签: git bitbucket

我在分支上有一个推送提交(它不是主要的回购分支)。这是我做的最后一次提交。我想从repo中删除它。推后我已经做了一些局部更改(在同一个分支处) 我想在本地保留所有更改。
我要git revert <commit>而不是git add . - &gt; git commit - &gt; git push origin my-branch

3 个答案:

答案 0 :(得分:2)

如果我错了,请纠正我,但这是我对你情况的理解:

  1. 您进行了一些更改,并使用git commit在本地提交了这些更改。
  2. 您使用git push将更改推送到远程存储库(Github?)。
  3. 现在,您已经意识到您刚刚推出的更改存在问题,并且您想要更正它。您在本地进行了这些更改,但尚未提交。
  4. 如果这是正确的,从这一点来说,你有两个选择。你可以:

    • 只需进行新的提交,然后将其提升。这是最简单的选择,但它确实会让你在git历史中出错。要做到这一点,您只需git addgit commitgit push,就像之前一样。
    • 或者,您可以修改您提交的提交,并推送修改提交(基本上删除您推送的第一个(不正确的)提交)。此选项重写历史记录,只要还没有其他人基于此分支完成工作,这就没问题了。此选项将完全从历史记录中删除您的错误提交。

    如果你想做选项2,你需要:

    1. git add用于暂存文件,就像您在创建新提交时一样。
    2. git commit --amend使用您当前的本地更改修改先前的提交。在此之后,它将有一个全新的提交哈希(就git而言,它与之前的错误提交无关)。
    3. git push -f origin 强制推送您的更改。强制是必需的,因为您正在更改分支历史记录。

答案 1 :(得分:0)

以下是您可以执行此操作的步骤。

  1. 取回当地分行。假设您的分支是主分支,并且您的后备名称类似于master_backup。你可以使用下面的git命令。

    git branch master-backup如果你在同一个分支上。 或者您也可以使用

    git branch master-backup master

  2. git revert <your commit id>

  3. 如果有任何冲突,请解决。

    1. git push origin master(还原后推送您的更改)

    2. git reset --hard master-backup(将您的更改返回给当地主人)

答案 2 :(得分:0)

最简单的方法是reset HEAD

方法1:

  1. 存储您当地的更改。
  2.   

    git stash

    1. 将您的分支重置为提交号 last_commit-1 ,如下所示。
    2.   

      git reset HEAD~1

        

      git reset HEAD ^

      1. 现在从stash中弹出更改。
      2.   

        git stash pop

        1. stash pop期间发生任何冲突时解决。

        2. 现在将所有更改一起提交,您就完成了。

        3. 这种方法的优点是你可以为自己保存1个提交哈希值。

          方法2:

          这种方法是

          1. 您只需使用其他本地更改准备另一个提交。

          2. 现在按如下方式压缩更改。

          3.   

            git rebase -i HEAD~2

            pick替换为squash,以获取您在步骤1中进行的最近提交。

            1. 现在保存更改。为此,请使用 Ctrl + O 。接下来,系统将提示您输入提交消息。您可以根据您的要求修改提交消息。
            2. 我们完成了!

              我个人的偏好始终是使用squashing。但是有一个预防措施,即通常在较少的人在分支机构上工作时使用它,如果某人新手做了git pull而不是本地的git reset --hard origin/branch_name,那么它可能变成地狱。

              希望它有所帮助!