git - 恢复过去的 git 提交但保留自此以来引入的更改

标签 git commit revert

我是 git 新手,不知道如何解决这个问题。

我想撤消一系列特定提交(与单个文件相关),我们认为这些提交不是问题的良好解决方案,但我想保留此后引入的所有其他提交。

我不想只是编辑文件来删除那段代码,因为我觉得在这里恢复更明确并且可以更好地传达意图。

事情是这样的:

X -> Y -> X -> -X -> Y -> X -> X

其中 Y 指的是与该特定功能相关的提交,X 是我们希望保持完整的所有提交,最终为:

X -> X -> -X -> X -> X

我不确定 rebase 在这里如何工作,因为我不想只包含从某个点开始的所有提交。

cherry-pick 是更好的方法吗?

编辑:可能值得一提的是所有这些提交都是推送的。

最佳答案

如果您的提交尚未共享(仍然是存储库中的本地提交),您可以使用交互式 rebase 来修复错误

语法是: git rebase --interactive commit's hash (或者只是 git rebase -i commit's hash)

在您的情况下,假设您的第一个 x 提交的哈希值是 x1 (使用 git log 来 git 提交此提交的哈希代码),那么您可以使用: git rebase -i x1

enter image description here

对于要删除的每个提交,将 pick 替换为 drop

然后退出编辑模式(使用 ESC 键)并:wq

关于git - 恢复过去的 git 提交但保留自此以来引入的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40912615/

相关文章:

Git merge ,然后还原,然后还原还原

java - 性能:包含大量对象的列表 VS 包含较小列表的大量对象

git - 使用团队资源管理器中的 Git 存储库将现有项目添加到 Visual Studio 2017 解决方案中的源代码管理

git - 查看 smartGit 中完整的变更历史

git - 通过 rebase 保持远程存储库同步

git - 通过 Git 管理永远不会提交的文件

jquery-ui - 向jQuery可拖动还​​原 “event”添加函数

git - 将新文件推送到新仓库

java - 当autocommit=false并且没有提交或回滚时Oracle如何处理SQL?

git - 如何为子模块更新编写 git 提交消息?