【问题标题】:Git: Reset to old commitGit:重置为旧提交
【发布时间】:2016-09-07 11:26:22
【问题描述】:

我知道这个问题已经回答了好几次了,但是到目前为止,我尝试过的每个发布的解决方案都对我不起作用:(

情况是:我们想要返回的主分支中有一个工作提交。不幸的是,从那时起,多项更改(包括与其他分支的合并)已被推送到 master。

所以我需要做的是让 master 分支再次到达最后一个工作提交 - 或检查最后一个工作提交并用它“覆盖”master 上的最后一个提交 - 在服务器 (github) 存储库上。我真的不在乎对最后一次工作提交所做的更改是否丢失,但如果它们保持完整不会受到伤害。

重要的是其他分支不要碰!!!

git revert 没有以多种方式完成这项工作......

【问题讨论】:

  • 你试过了吗:stackoverflow.com/a/4114122/2394026。查看“Undo published commits with new commits”段落的第二个解决方案
  • 我可以在这里想到至少两个问题似乎可以解决您的问题。您到底尝试过什么?

标签: git revert


【解决方案1】:

我们可以尝试用新分支替换主分支,有点可疑:)

从你知道的工作提交中创建一个新分支

  • 如果提交是从头部向下第 n 级使用git branch master-temp HEAD~n。将 n 替换为级别。

    • 如果你有提交哈希使用git branch master-temp <sha1>
  • 将当前主分支重命名为新名称master-oldmaster-deprecated
  • 将新分支master-temp 重命名为master

这将保留更改,创建一个工作代码分支。所有团队成员都可以继续他们的工作而无需任何更改。

如果旧分支需要任何其他提交,请选择提交到新的主分支。

随着@Flows 添加,

  • 如果需要推送到master,需要使用git push -force <branch>

本地主分支必须根据更改进行更新,并且开发周期按照设计进行。

【讨论】:

  • 之后,您应该能够push --force 到存储库,以便为所有用户提供更新。但是force 并不总是可用的,需要小心处理。
  • @Flows,感谢补充,是的,第一次必须小心执行。 force push 首次创建,所有其他用户必须更新各自的主分支
【解决方案2】:

我建议您找出您希望切换到使用的最后一个良好提交的提交 ID:

git log --stat

然后,如果您在 master 分支中,请对该提交 id 执行 git checkout

git checkout <commit id>

这可能会使您进入分离状态,现在请确保您回到您希望的位置并进行最终提交并推送到 master。希望对您有所帮助。

【讨论】:

  • 谢谢。然而,在我想再次提交后,我得到一个“HEAD detached at 761f50b”。如何提交然后推送到主分支?
  • 从这一点开始,您可以做两件事,因为您的头部现在已分离到所需的提交: 1. 创建一个新分支:git checkout -b &lt;new branch name&gt; 这将从分离的分支中创建一个新分支头部状态。 2. 但是,如果您要将 master 永久设置为该状态,则只需将 master 的 head 重置为该提交 id。请按照以下步骤操作:git checkout master 您将再次切换到 master 分支,其中包含所有不需要的更改。从那里您需要将 HEAD 重置为所需的提交 ID:git reset 761f50b
猜你喜欢
  • 2016-06-23
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 2018-10-18
  • 2023-02-08
  • 2020-06-12
  • 2020-09-21
  • 1970-01-01
相关资源
最近更新 更多