使用git删除提交

使用git删除提交,git,Git,可能重复: 我是git新手,遇到了一个需要帮助的情况。 我将一个远程存储库克隆到我的PC上,然后打开了一个名为“meir”的新分支 出于练习的目的,我首先提交了我对一个文件所做的一些更改。后来,我改变了文件的方式,我希望它是和提交再次。然后我将本地分支推送到远程存储库 问题是我有第一个提交,这是一个测试,我不希望它在远程服务器上。我考虑了两种可能的修复方法: 删除本地和远程存储库上的远程“meir”分支,然后重新开始 仅删除第一次提交,然后将分支再次推送到服务器,这样它也将丢失第一次提交 我需

可能重复:

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

出于练习的目的,我首先提交了我对一个文件所做的一些更改。后来,我改变了文件的方式,我希望它是和提交再次。然后我将本地分支推送到远程存储库

问题是我有第一个提交,这是一个测试,我不希望它在远程服务器上。我考虑了两种可能的修复方法:

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

    谢谢,
    Meir

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

    但是,如果您真的想这样做,您可以使用交互式重基和强制推送:

  • 使用git-rebase-i压缩第一个提交和第二个提交,以便本地分支 正在按照您希望的方式设置远程分支
  • 使用gitpush-f(具有适当的分支规范)来“强制推送”到远程分支。没有-f的正常git推送将抱怨推送不是快进推送,并将拒绝它

  • 另一种选择是使用git push origin:meir删除远程分支“meir”,使用git rebase-i重新购买本地存储库,然后按正常方式进行推送。

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

    但是,如果您真的想这样做,您可以使用交互式重基和强制推送:

  • 使用git-rebase-i压缩第一个提交和第二个提交,以便本地分支 正在按照您希望的方式设置远程分支
  • 使用gitpush-f(具有适当的分支规范)来“强制推送”到远程分支。没有-f的正常git推送将抱怨推送不是快进推送,并将拒绝它

  • 另一种选择是使用git push origin:meir删除远程分支“meir”,使用git rebase-i重新购买您的本地存储库,然后按正常方式推送。

    有多种方法,但都不推荐 因此,使用它们的风险自负

    正在推送其中一个提交

    使用rebase

    如果您有2次提交&希望只推送其中一次,而不是最新的一次

  • git重置–硬
  • git推送
  • git重置–硬
  • 这样,只会推送与第二次提交Id对应的更改&不会推送您的最新提交

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

  • git日志-注意53259b225之前的提交ID。让我们说它是xxxxxxxx
  • git rebase-i xxxxxxxx
  • 在打开的编辑器中,您应该会看到两行表示提交53259b225和227552392

    挑227552392之类的 选择53259b225等等

    将这两行重新排序,使其看起来像

    选择53259b225等等 挑227552392之类的

    然后保存文件

    这样,您就基本上改变了提交的顺序。如果您在两个提交中处理不同的文件集,那么这将是一个相对容易的过程。如果没有,那么您可能需要进行一些合并

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

  • git rebase——abort可以让您回到启动交互式rebase之前的流的样子
  • 使用壁球

  • 执行“git log”并记录您的头提交(列表中的第一次提交),并记录更改的“基本提交”(在您要替换的第一次提交之前的提交)。确保添加索引中没有文件
  • 执行“git reset--hard”(使用此命令时要小心;确保执行上述步骤)
  • 执行“git merge--squash”-这将撤销提交,所有提交的文件都将被暂存
  • 执行“git状态”等操作,并验证预期更改是否在索引(和工作树)中
  • 如果您不想推送任何文件,请执行git reset HEAD或 如果您希望对这些文件进行更改,请进行更改并将其暂存
  • 执行“git提交-m”

  • 如您所见,这也可以用于将几个提交合并为一个提交。

    有多种方法,但没有一种方法是推荐的 因此,使用它们的风险自负

    正在推送其中一个提交

    使用rebase

    如果您有2次提交&希望只推送其中一次,而不是最新的一次

  • git重置–硬
  • git推送
  • git重置–硬
  • 这样,只会推送与第二次提交Id对应的更改&不会推送您的最新提交

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

  • git日志-注意53259b225之前的提交ID。让我们说它是xxxxxxxx
  • git rebase-i xxxxxxxx
  • 在打开的编辑器中,您应该会看到两行表示提交53259b225和227552392

    挑227552392之类的 选择53259b225等等

    将这两行重新排序,使其看起来像

    选择53259b225等等 挑227552392之类的

    然后保存文件

    这样,您就基本上改变了提交的顺序。如果您在两个提交中处理不同的文件集,那么这将是一个相对容易的过程。如果没有,那么您可能需要进行一些合并