gpt4 book ai didi

git 还原几个特定的​​提交

转载 作者:IT王子 更新时间:2023-10-29 01:29:22 25 4
gpt4 key购买 nike

问题:一个分支有好的提交与不需要的提交交错。

尝试的解决方案:

git revert hash5 hash8 hash9 hash23

我认为这会做的是它会应用所有指定的提交,然后让我解决所有冲突。

我现在认为会发生什么:

  • git 应用 commit hash5,在引入大冲突的过程中。
  • 我尝试 merge ,按照我希望的方式编辑代码,为更多冲突做好准备(见下一点)
  • git 应用提交 hash8,这与 merge 中完成的编辑冲突
  • 我尝试 merge ...等等

问题:如何让 git 在向我显示任何可能的冲突之前连续应用所有还原?

最佳答案

完整性检查

首先,请注意 git revert按照您列出它们的哈希值的顺序恢复您的补丁;你需要列出从最新到最旧的哈希值,因为你想及时倒退。所以,我要调用你的哈希

<hash1> ... <hashN>

哪里<hash1>早于 <hash2> ... 早于 <hashN> .所以,确保你在做

git revert <hashN> ... <hash1>

首先!

简单的解决方案

其次,假设您以正确的顺序还原它们,请尝试 --no-commit选项:

git revert --no-commit <hashN> ... <hash1>

更复杂的解决方案

第三,如果简单的解决方案效果不佳,但您想要还原的提交作为单个提交确实有意义(如果不是我看不到太大希望),那么试试这个:构建一个大提交在您要还原的四个中,然后还原大提交。

  1. 构建大提交:

    在最早提交的父级创建一个分支:

    git checkout -b big-commit <hash1>~

    复制新分支上的提交并折叠它们:

    git cherry-pick --no-commit <hash1> ... <hashN>
    git commit -m "Big commit"

    你现在应该在你的分支上有一个大提交 big-commit .

  2. 将大提交反向应用到您要还原的分支:

    git checkout <branch you wanted to revert on>
    git revert big-commit

另一个相对简单的解决方案

使用选择性 rebase 来重建有问题的分支,就好像它从未包含不需要的提交一样:

  1. 创建一个新的 rebuild工作地点:

    git checkout -b rebuild <branch you want to revert>
  2. 交互式 rebase ,删除不需要的提交:

    git rebase -i <hash1>~

    在交互式 rebase 编辑器中,删除 <hash1> 的行... <hashN> .

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

如果您需要在 <branch you want to revert> 上发表您的作品, 你不能只是 git reset它指向你的新 rebuild分支:

git checkout <branch you want to revert>
git reset --hard rebuild

(例如,因为您已经将其公开推送),那么您可以将差异应用于 <branch you want to revert>作为补丁:

git co <branch you want to revert>    
git diff <branch you want to revert> rebuild | patch

关于git 还原几个特定的​​提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20229739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com