首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >git还原几个特定的提交

git还原几个特定的提交
EN

Stack Overflow用户
提问于 2013-11-26 22:55:24
回答 1查看 3.6K关注 0票数 17

问题:一个分支有好的提交与不想要的提交交织在一起。

尝试解决办法:

代码语言:javascript
运行
复制
git revert hash5 hash8 hash9 hash23

我认为这样做的目的是应用所有指定的提交,然后让我整理任何冲突。

我现在认为会发生这样的事情:

  • git在引入大冲突的过程中应用提交hash5。
  • 我记录了一个合并,编辑了我想要的代码,为更多的冲突设置了舞台(参见下一点)。
  • git应用提交hash8,这与合并中所做的编辑冲突。
  • 我尝试合并..。等

问:在向我展示任何可能的冲突之前,如何让git连续应用所有的恢复?

EN

回答 1

Stack Overflow用户

发布于 2013-11-27 01:02:07

健全性检查

首先,请注意,git revert按照列出它们散列的顺序恢复修补程序;您需要列出从最新到最老的散列,因为您希望在时间上进行倒退。所以,我要叫你的哈希

代码语言:javascript
运行
复制
<hash1> ... <hashN>

<hash1><hash2>老..。比<hashN>还老。所以,确定你在做什么

代码语言:javascript
运行
复制
git revert <hashN> ... <hash1>

首先!

易解

第二,假设您已经按照正确的顺序恢复它们,请尝试--no-commit选项:

代码语言:javascript
运行
复制
git revert --no-commit <hashN> ... <hash1>

更多涉及的解决方案

第三,如果简单的解决方案不能很好地工作,但是您想要还原的提交确实是有意义的(如果不是,我看不出有多大希望),那么尝试如下:在您想要还原的四个提交中构建一个大提交,然后恢复大提交。

  1. 建立大的承诺: 在最旧提交的父节点处创建一个分支: git签出-b大提交~ 复制新分支上的提交并折叠它们: 把樱桃-摘-不-交.git提交-m“大提交” 现在在您的分支big-commit上应该有一个很大的承诺。
  2. 将大提交反向应用于要恢复的分支: git签出git还原大提交

另一个相对容易的解决方案

使用选择性重基来重新构建相关分支,就好像它从未包含不需要的提交一样:

  1. 创建一个新的rebuild分支,以便在其中工作: git签出-b重建
  2. 交互式重基,删除不想要的提交: git重碱-i ~ 在交互式重基编辑器中,删除<hash1> . <hashN>的行。

现在,您的rebuild分支将包含<branch you want to revert>,好像<hash1> . <hashN>从未存在过一样。如果你在这里遇到冲突,这似乎是不可避免的。

如果您需要将您的工作放在<branch you want to revert>上,并且您不能仅仅将它指向您的新rebuild分支:

代码语言:javascript
运行
复制
git checkout <branch you want to revert>
git reset --hard rebuild

(例如,因为您已经公开推出了它),那么您可以将这些差异作为一个补丁应用于<branch you want to revert>

代码语言:javascript
运行
复制
git co <branch you want to revert>    
git diff <branch you want to revert> rebuild | patch
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20229739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档