我搜索了许多与我的问题相关的答案,但他们并没有完全按照我的意愿行事,而且我不确定如何描述它。
假设我做了一个名为 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
即使您要撤消的提交在历史记录中较早完成也有效。