git - 如何将提交“撤消”为新提交?

我搜索了许多与我的问题相关的答案,但他们并没有完全按照我的意愿行事,而且我不确定如何描述它。

假设我做了一个名为 remove tracking 的提交并删除了 10 行代码。

我想基本上“撤消”这个提交,但不改变分支,并让旧的提交保持原样。几乎就好像我说“哦,我需要撤消这些更改”,然后我从差异的红色部分手动复制和粘贴,然后将它们粘贴到需要去的地方,并取消这些更改。

很多时候我会做很多与拆分测试相关的撤消/重做,这个工作流程比真正“撤消”提交要好得多。我真的只想接受最后一次提交并做相反的事情并将其放入未分级的状态,仅此而已。

我希望它取消暂存的原因是因为通常在撤消它之后我需要对撤消进行进一步更改,这就是我不想要“实际”撤消的原因

回答1

比如“我想把这个文件恢复到 HEAD 上的样子~”?

git checkout HEAD~ -- the-file
git reset the-file # so that it is out of the index

如果我没记错的话,这是新方法:

git restore --worktree HEAD~ -- the-file

如果您需要取回整个文件而不是单个文件,请在配方中使用 . 而不是 the-file

回答2

这正是 https://git-scm.com/docs/git-revert 所做的:

给定一个或多个现有提交,还原相关补丁引入的更改,并记录一些记录它们的新提交。

使用 --no-commit 标志并使用 git reset 从暂存区域中删除更改。

如果您要撤消的提交是前一个提交,@eftshift0 的答案有效。 git revert 即使您要撤消的提交在历史记录中较早完成也有效。

相似文章

python - Python - 在多行和多列中比较 values

我是Python的新手,我有一个如下所示的数据框(请参阅原始数据table)。最终目标是协调来自2个系统(sys1与sys2,在“源”列中标记)的记录(即id、rg、prd和数量)。我如何使用1个函数...

git - Git rebase 无效上游“开发”的问题

我有一种情况,我在3个月前从开发中创建了一个特性分支,从那时起,其他同事一直在研究其他发布到开发中的特性分支。我现在想将我的更改也集成到开发中,而不会破坏他们的代码,也不会破坏我的代码。我对此进行了研...

最新文章