使用git删除提交

时间:2011-08-23 07:29:08

标签: git

  

可能重复:
  How to delete a 'git commit'

我是git的新手,我遇到了一些需要帮助的情况。 我将一个远程存储库克隆到我的电脑上,然后打开了一个名为“meir”的新分支。

出于练习目的,我首先提交了一些我对文件所做的更改。之后,我按照我想要的方式更改了文件并再次提交。然后我将本地分支推送到远程存储库。

问题是我有第一次提交是一个测试,我不希望它在远程服务器上。我想了两种可能的解决方法:

  1. 删除本地和远程存储库上的远程“meir”分支,然后重新开始。
  2. 仅删除第一个提交,然后再次将分支推送到服务器,这样它也将丢失第一个提交。
  3. 我需要运行哪些命令来实现每个选项?

    谢谢, 梅尔

2 个答案:

答案 0 :(得分:2)

一般来说,在推送到远程存储库中的公共分支后,不应更改提交历史记录。它会给从远程存储库中提取/克隆的人带来痛苦。

但如果你真的想这样做,可以使用交互式rebase和强制推送:

  1. 使用git rebase -i将第一次提交压缩为第二次提交,以便使用本地分支 按照您希望远程分支的方式进行设置。
  2. 使用git push -f(使用适当的分支规范)“强制推送”到远程分支。没有-f的正常git push会抱怨推送不是快速推送而且会否认它。
  3. 另一种选择是使用git push origin :meir删除远程分支'meir',使用git rebase -i重新构建本地存储库,然后正常推送。

答案 1 :(得分:1)

有多种方法可以做到,但是没有一种方法可以推荐 因此,使用它们需要您自担风险。

推送其中一个提交

使用rebase

如果您有2个提交&希望只推动其中一个,这不是最新的一个。

  1. git reset -hard< 2nd commit id>
  2. git push
  3. git reset -hard< 1st commit id>
  4. 只有这样才会推送与第二个提交ID相对应的更改。你的最新提交不会被推送。

    但是,如果必须推送最新的提交而不是第二次提交,则必须先撤消提交

    1. git log - 注意53259b225之前的提交ID。让我们说它是xxxxxxxx
    2. git rebase -i xxxxxxxx
    3. 在打开的编辑器中,您应该看到两行代表您的提交53259b225& 227552392喜欢

      等等,请选择227552392等等 选择53259b225 blah blah

      将这两行重新排序为

      选择53259b225等等等等 选择227552392 blah blah

      然后保存文件。

      有了这个,你实际上改变了提交的顺序。如果您在两次提交中处理不同的文件集,那么这将是一个相对容易的过程。如果没有,那么你可能会有一些合并。

      如果您认为自己搞砸了,那么在任何时候都可以发出命令

      1. git rebase - 在启动交互式rebase之前,让您回到流的样子。
      2. 使用壁球

        1. 执行“git log”并记下您的HEAD提交(列表中的第一次提交)并记下您的更改的“基本提交”(在您要替换的第一次提交之前(及时)提交)。确保添加索引中没有文件。
        2. 执行“git reset --hard”(请谨慎使用此命令;确保上述步骤。)
        3. 执行“git merge --squash” - 这将撤销提交,所有提交的文件将被暂存。
        4. 执行“git status”等,并验证预期的更改是否在索引(和工作树)中。
        5. 如果您不想推送任何文件,请执行git reset HEAD或 如果您希望对这些文件进行更改,请进行更改并进行分级
        6. 执行“git commit -m''”。
        7. 如您所见,这也可用于将少数提交合并为一个。