2012-12-29 124 views
1

如果时间不够,请跳过以下完全不合乎技术的,无关紧要的3段。Git - 删除/撤消提交的方式

我一直在网上与文本流打了几个小时,只是为了了解如何恢复一个提交,后来发现这是不必要的,不需要的或错误的。对于git来说,有很多内容丰富的高级教程/手册,其中大部分在事情变得复杂时未能提供实用指南。即使是在stackoverflow上的美丽答案有时可能会变得漂移和误导,因为最终我们是试图实现这些答案的noobs,大多数人失败了几十次,并从生活中沮丧=/

当这些问题与我们有关可爱,珍贵的项目,它变得越来越可怕和压力大,git是地狱 - 一个复杂的生物谁不愿意合作大部分时间,这使事情变得更加困难(!)

很抱歉对于长篇介绍,我知道大多数人可能不会这样做,但对于我和其他人来说,手册和帮助以及指南有时是无奈的,而且你凭借自己的运气,洞察力和耐力而独立自主。这就是为什么,我不打算今天问一个问题,而是回答可能一个后它成了我的可爱解决我的问题,希望它会帮助你摆脱痛苦=)


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

+0

恢复和删除是不一样的:如果你恢复,你不会失去历史,如果你删除你改变历史。那么,你最终想要什么?如果您有其他方获取/合并您的特定分支,完全除去是一个糟糕的主意。 – fge

+0

请以问题的形式发布问题,并将答案作为答案。你可以回答你自己的问题。我已将解决方案移至下面的答案。 –

+0

我同意你的看法,如果你在正确的位置编辑我的参赛作品,我会很高兴,这样这个答案可以帮助有各种问题的人。 @MadaraUchiha感谢你的努力。 – clancularius

回答

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

  • 步骤2:执行底垫以操纵提交 - >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'或/和'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步:恭喜!你完成了你的目标。现在,您可以从本地回购和github上免除不必要的提交。从git status您可以看到,自从您同步后,您不再偏离“起源/主”,您可以从git log确认不需要的提交的死亡。您也可以登录'github'并通过点击'提交'从那里检查。


这是现在所有。我可能犯了错误,并会理解任何正确的编辑。