如何 "undo" 一个提交作为一个新的提交?
How to "undo" a commit as a new commit?
我搜索了很多与我的问题相关的答案,但它们并不完全符合我的要求,而且我不确定如何描述它。
假设我做了一个名为 remove tracking
的提交,我删除了 10 行代码。
我想从本质上“撤消”这个提交,但保持分支不变,并让旧提交保持原样。几乎就像我说“哦,我需要撤消这些更改”,然后我手动复制并粘贴 diff 的红色部分并将它们粘贴到需要去的地方,然后取消这些更改。
我经常做很多与拆分测试相关的 undo/redo,这个工作流程比真正“撤消”提交要有利得多。我真的只想获取最后一次提交并执行相反的操作并将其放入未暂存状态,仅此而已。
我不想要它的原因是因为通常在撤消之后我需要对撤消做进一步的更改,这就是为什么我不想要 'actual' 撤消
喜欢“我想让这个文件回到它在 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
。
这正是 git revert 所做的:
Given one or more existing commits, revert the changes that the related patches introduce, and record some new commits that record them.
使用 --no-commit
标志并使用 git reset
从临时区域中删除更改。
如果您要撤消的提交是前一个提交,则@eftshift0 的回答有效。 git revert
即使您要撤消的提交在历史记录中较早完成,也能正常工作。
我搜索了很多与我的问题相关的答案,但它们并不完全符合我的要求,而且我不确定如何描述它。
假设我做了一个名为 remove tracking
的提交,我删除了 10 行代码。
我想从本质上“撤消”这个提交,但保持分支不变,并让旧提交保持原样。几乎就像我说“哦,我需要撤消这些更改”,然后我手动复制并粘贴 diff 的红色部分并将它们粘贴到需要去的地方,然后取消这些更改。
我经常做很多与拆分测试相关的 undo/redo,这个工作流程比真正“撤消”提交要有利得多。我真的只想获取最后一次提交并执行相反的操作并将其放入未暂存状态,仅此而已。
我不想要它的原因是因为通常在撤消之后我需要对撤消做进一步的更改,这就是为什么我不想要 'actual' 撤消
喜欢“我想让这个文件回到它在 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
。
这正是 git revert 所做的:
Given one or more existing commits, revert the changes that the related patches introduce, and record some new commits that record them.
使用 --no-commit
标志并使用 git reset
从临时区域中删除更改。
如果您要撤消的提交是前一个提交,则@eftshift0 的回答有效。 git revert
即使您要撤消的提交在历史记录中较早完成,也能正常工作。