Git -一种删除/反转提交的方法



如果时间紧迫,请跳过以下完全不专业、不相关的3段内容。

我已经在网络上与文本流斗争了几个小时,只是为了理解如何恢复提交,这后来被发现是不必要的,不需要的或错误的。有很多介绍性的& &;git的高级教程/手册,当事情变得复杂时,大多数都不能提供实用的指导。即使是漂亮的答案在stackoverflow上有时也会变得飘移和误导,因为最终我们是尝试实现这些答案的新手,大多数都失败了几十次,从生活中感到沮丧=/

当这些问题是关于我们可爱的,宝贵的项目时,它变得越来越可怕和紧张,它是一个非常复杂的生物,大多数时候不愿意合作,这使得事情变得更加困难(!)

很抱歉有这么长的介绍,我知道这可能不是大多数人的情况,但对我和我喜欢的人来说,手册、帮助和指南有时是无助的,你只能靠自己的运气、洞察力和耐力。这就是为什么,我今天不打算问问题,而是回答一个可能的问题,在它成为我对我的问题的可爱的解决方案后,希望它能帮助你走出你的痛苦=)


Problem:如果你已经在你的项目中提交了一个更改,但想要恢复它,即使有很多方法可以做到这一点,这个对我来说很闪耀:git rebase。无论你是否推送了你的更改,我们都可以恢复提交,但如果你已经推送了它,我们将需要再次重新推送以更新github上的主分支,我稍后会回到这个问题。

  • 步骤1:跟踪你不想要的提交的顺序——> git log

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

  • 第三步:你将被引入一个编辑器,在这个编辑器上你必须编辑页面顶部的行,这些行前面没有#。每一行按顺序表示一次提交(最近的提交出现在顶部)。选择要删除的提交,并删除对应的整个行。然后按键盘上的ctrl+x,然后按'y',最后按enter

  • 第4步:如果一切顺利,你很好,提交被删除,你准备跳"第9步"。但如果不是这种情况,如果你得到一个错误信息,那么这意味着在不同的提交之间有链接的更改,这些更改之间产生了依赖关系。这就是为什么你不能像那样删除一个提交,因为它被另一个依赖。首先,我们必须解决这个冲突。

  • 第5步:因为有一个错误,rebase让您进入git的limbo,授予您进行更改的能力,例如更改文件的路径,而无需在线任何分支。无论如何,在这一点上,检查状态--> git status

  • 步骤6:正如你所看到的,有'changes to be committed'或/和'unmerged paths'。首先你必须一个一个地添加它们,通过这个命令——> git add any_file_path

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

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

  • 第9步:执行git status,看看是否需要"强制推"。如果你之前推送过不需要的提交,你会在"状态"上看到你已经偏离了"主/源"。你还可以看到'origin/master'的提交比你现在要多,因为你一分钟前刚刚删除了一些。现在,是时候更新github上的主分支了。如果状态正常(这意味着您之前没有推送不需要的提交),则跳过下一步。

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

  • 第11步:恭喜!你完成了你的目标。现在,您可以从本地repo和github上的不必要提交中解脱出来。从git status你可以看到你不再偏离'origin/master',因为你已经同步了,从git log你可以确认不想要的提交已经死亡。你也可以登录'github',点击'commits'查看。


到此为止。我可能有错误,将感谢任何正确的编辑。

最新更新