【问题标题】:Removing a commit with git [duplicate]使用 git 删除提交 [重复]
【发布时间】:2011-11-01 17:23:18
【问题描述】:

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

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

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

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

  1. 删除本地和远程存储库上的远程“meir”分支并重新开始。
  2. 仅删除第一个提交,然后再次将分支推送到服务器,这样它也会丢失第一个提交。

我需要运行哪些命令来实现每个选项?

谢谢, 梅尔

【问题讨论】:

标签: git


【解决方案1】:

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

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

  1. 使用 git rebase -i 将第一个提交压缩为第二个提交,以便本地分支 是按照您希望远程分支的方式设置的。
  2. 使用 git push -f(使用正确的分支规范)“强制推送”到远程分支。没有 -f 的普通 git push 会抱怨推送不是快进推送并会拒绝。

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

【讨论】:

    【解决方案2】:

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

    推送其中一个提交

    使用变基

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

    1. git reset –hard
    2. git 推送
    3. git reset –hard

    只有与 2nd Commit Id 对应的更改才会被推送,而您的最新提交将不会被推送。

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

    1. git log - 记下 53259b225 之前的提交 ID。让我们说它是 xxxxxxxx
    2. git rebase -i xxxxxxxx

    在打开的编辑器中,您应该会看到两行代表您的提交 53259b225 和 227552392 之类的

    选择 227552392 blah blah 选择 53259b225 blah blah

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

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

    然后保存文件。

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

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

    1. git rebase --abort 让您回到开始交互式 rebase 之前的流的样子。

    使用壁球

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 2012-10-09
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 2017-07-09
      • 2011-09-03
      • 2012-07-01
      • 1970-01-01
      相关资源
      最近更新 更多