如何在保持 git 历史向前发展的同时恢复提交
Posted
技术标签:
【中文标题】如何在保持 git 历史向前发展的同时恢复提交【英文标题】:How to revert a commit while keeping the git history moving forward 【发布时间】:2021-10-14 04:05:38 【问题描述】:假设我有一个大型项目,团队很大,而且提交速度很快。我编写了一些代码,进行提交,然后将该提交推送到源。
然后我决定不再想要那个提交。如果我要
git reset --hard HEAD~1
或类似的东西,我的历史可以追溯到过去,而且 GitHub 一直坚持让我运行 pull,因为我的本地现在落后于 GitHub。
相反,我想要做的是返回一个提交,但让历史看起来好像我做了原始提交,然后又做了另一个提交,但第二次提交实际上只是删除了第一的。这样,其他团队成员可以随时拉取,而不会搞砸历史记录。
我怎样才能做到这一点?
【问题讨论】:
你试过了吗...revert
?
您似乎想隐藏还原,这是可以理解的,但通常不是必需的或重要的。如果没有重置,你不会这样做,这会产生分歧,需要的不仅仅是来自其他开发者的拉动。
这能回答你的问题吗? How to revert last commit and remove it from history?
因为您说“返回提交”。特别是“返回一个提交,但是”。这意味着您希望在可见、历史和现实之间有所区别。
听起来你根本不知道git revert
,它正是你想要的:做一个完全撤消的new提交另一个提交。既然您知道这一点,我不确定这个问题有多大价值(恕我直言)。也许考虑删除它?
【参考方案1】:
相反,我想要做的是返回一个提交,但让历史看起来好像我做了原始提交,然后又做了另一个提交,但第二次提交实际上只是删除了首先
这很愚蠢。你不能往后退,假装你往前走。不是让历史出现以某种方式,而是让历史成为那种方式——也就是说,你事实上做了原始提交,然后之后进行了另一次提交,删除了第一次引入的更改。这正是git revert
所做的,所以只需使用它。没有什么可耻的;确实会犯错误,而修复它们是工作的一部分。
【讨论】:
我显然对这个问题的措辞非常糟糕。我不在乎历史长什么样。我只想在保持历史线性的同时删除更改,所以 git 和 github 不要抱怨。reset
导致这种问题。我去看看revert
,谢谢。
是的,revert
正是这样做的:它使历史保持线性。它使事情顺利进行A -- B -- C -- Ooops -- Unoops -- D
。以上是关于如何在保持 git 历史向前发展的同时恢复提交的主要内容,如果未能解决你的问题,请参考以下文章