0

如果您时间紧迫,请跳过以下完全非技术性的无关 3 段。

我已经与网络上的文本流斗争了几个小时,只是为了了解如何恢复提交,后来发现这是不必要的、不需要的或错误的。有很多关于 git 的介绍性和高级教程/手册,当事情变得复杂时,其中大部分都无法提供实用的指导。即使是stackoverflow上的漂亮答案有时也可能会变得飘忽不定和误导,因为最终我们是尝试实施这些答案的菜鸟,大多失败了几十次,并且对生活感到沮丧=/

当这些问题与我们可爱、珍贵的项目有关时,它会变得越来越可怕和压力,而 git 是一个复杂的生物,大多数时候都不愿意合作,这让事情变得更加困难(!)

对于冗长的介绍非常抱歉,我知道大多数人可能并非如此,但对我和其他人来说,手册、帮助和指南有时是无助的,你靠自己的运气、洞察力和耐力。这就是为什么,我今天不打算问一个问题,而是在它成为我对我的问题的可爱解决方案之后回答一个可能的问题,希望它能帮助你摆脱痛苦=)


Problem:如果您对项目进行了更改但想恢复它,即使有很多方法可以做到这一点,这个对我来说已经很亮了:git rebase. 不管你是否推送你的更改,我们都可以恢复那个提交,但是如果你已经推送了,我们需要再次推送以更新 github 上的 master 分支,我稍后会回来.

4

1 回答 1

2
  • 第 1 步:跟踪您不需要的提交的顺序 -->git log

  • 第 2 步:执行 rebase 以操纵提交 --> git rebase -i HEAD~n,这样 'n = 不需要的提交的顺序'。示例:如果要恢复最近的提交,请将 n 替换为 1。

  • 第 3 步:将向您介绍一个编辑器,您必须在该编辑器上编辑页面顶部的行,那些没有以#开头的行。每行按顺序代表一个提交(最近的提交显示在顶部)。选择您要删除的提交并删除整个相应的行。然后按ctrl+x您的键盘,'y'最后按enter

  • 第 4 步:如果一切顺利,你很好,该提交被删除,你准备好跳“第 9 步”。但是,如果不是这种情况,并且如果您收到错误消息,则意味着在各种提交之间存在链接更改,这些更改在这些提交之间创建了依赖关系。这就是为什么你不能像这样删除一个提交,因为它被另一个依赖。首先,我们必须解决这个冲突。

  • 第 5 步:由于出现错误,rebase让您进入 git 的边缘,使您能够进行更改,例如更改文件的路径,而无需您在任何分支上在线。无论如何,此时,检查状态-->git status

  • 第 6 步:如您所见,有'changes to be committed'or/and 'unmerged paths'。您首先必须通过此命令逐个添加它们-->git add any_file_path

  • 第 7 步:现在是提交的时候了。这些更改将更新另一个现有提交,这取决于您删除的提交。请记住,错误是由于冲突而显示的,通过提交更新,错误将得到解决。-->git commit

  • 第 8 步:现在,您可以检查git log是否删除了不需要的提交。是时候继续前进了。-->git rebase --continue

  • 步骤 9:执行git status并查看是否需要“强制推送”。如果您之前推送过不需要的提交,您将在“状态”上看到您与“主/原点”不同。您还可以看到 'origin/master' 的提交比现在多,因为您在一分钟前删除了一些。现在,是时候更新 github 上的 master 分支了。如果状态上一切正常(这意味着您之前没有推送不需要的提交),则跳过下一步。

  • 第 10 步:为了更新 github,只需执行强制推送。-->git push origin +master

  • 第 11 步:恭喜!你完成了你的目标。现在,您可以从本地 repo 和 github 上的不需要的提交中解脱出来。从git status您可以看到,由于您已同步,您不再与“origin/master”不同,并且git log您可以确认不需要的提交的死亡。您还可以登录“github”并通过单击“提交”从那里进行检查。


目前为止就这样了。我可能犯了错误,并会感谢任何正确的编辑。

于 2012-12-29T14:35:41.873 回答