使用git删除提交

可能重复:
如何删除'git commit'

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

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

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

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

    谢谢,梅尔


    一般来说,在推送到远程存储库中的公共分支后,您不应该更改提交历史记录。 这会对从远程存储库中拉出/克隆的人造成痛苦。

    但是如果你真的想要这样做,你可以使用交互式重新分配和强制推送:

  • 使用git rebase -i将第一次提交压缩为第二次,以便本地分支以您想要远程分支的方式进行设置。
  • 使用git push -f(具有正确的分支规范)来“强制推送”远程分支。 没有-f的正常git push会抱怨push不是快进,并且会拒绝它。
  • 另一个选择是使用git push origin :meir删除远程分支'meir',使用git rebase -i重新构建本地存储库,然后像平常一样推送。


    有多种方式可以做到,但是没有一个可以重新推荐,所以,使用它们需要您自担风险。

    推送其中一个提交

    使用rebase

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

  • git reset -hard <第二个提交id>
  • git推
  • git reset -hard <第一次提交id>
  • 通过这种方式,只有对应于第二个提交ID的更改才会被推送,并且您的最新提交将不会被推送。

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

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

    选择227552392等等等等挑53259b225等等等等

    重新排列这两行看起来像

    挑53259b225等等等等挑227552392等等等等

    然后保存该文件。

    有了这个,你基本上可以改变提交的顺序。 如果你在两个提交中处理了不同的文件集,那么这将是一个相对简单的过程。 如果没有,那么你可能有一些合并做。

    如果在任何时候你认为你已经搞砸了,那么你可以发出命令

  • git rebase - 在您开始交互式转化之前,让您回到您的流的样子。
  • 使用壁球

  • 做“git log”并记下你的HEAD提交(首先在列表中提交)并记录你的修改的“基本提交”(提交之前(及时)提交你要替换的第一个提交)。 确保没有文件添加索引。
  • 执行“git reset --hard”(使用此命令时要小心;确保上述步骤)。
  • 做“混帐合并--squash” - 这将撤销提交并且所有提交的文件将被暂存。
  • 做“混帐状态”等,并验证预期的更改是否在您的索引(和工作树)中。
  • 如果您不想推送任何文件,请执行git reset HEAD,或者如果您希望对这些文件进行更改,请进行更改并对其进行分阶段处理
  • 做“git commit -m''”。
  • 正如你所看到的,这也可以用来合并几个提交到一个。

    链接地址: http://www.djcxy.com/p/9003.html

    上一篇: Removing a commit with git

    下一篇: How do I reset a bad commit using git on a remote branch?