如何从单个文件中的旧提交还原更改

如何还原/删除在较早的多文件提交中所做的更改,但仅在单个文件中执行?即像

git revert <commit-specifier> <file>

git revert以外不接受<file>参数。以下答案均不能解决此问题:

Git: Revert old commit on single file只是关于如何调试冲突。

Undo a particular commit in Git that's been pushed to remote repos无法解决我的单个文件问题。

Git: revert on older commit也不解决单个文件的问题。

iCMS 回答:如何从单个文件中的旧提交还原更改

Git是一个工具集,而不是一个解决方案,因此有多种解决方案。但是,一种相对简单的方法是从git revert -n开始,它开始还原,但没有完成

git revert -n <commit-specifier>

这当然试图将对所有 all 文件的更改全部撤回。您只想撤消对一个文件的更改。但是现在git revert进行了不提交的尝试,您只需要还原您不想修改的每个文件。获取此类文件的列表,然后使用git checkoutgit restore(严格按照git status的建议使用命令)使这些文件与当前提交匹配。现在git status将只显示一个文件作为要提交的更改 ,您现在可以git commit看到一个文件。

另一种相对简单的方法是使用:

git show <commit-specifier> -- <pathspec> | git apply -R

如果您希望Git在文件的基本版本上使用三向合并,则可以在-3命令中添加git apply。在这种情况下,将--full-index添加到git show命令选项可能会有所帮助。 (与使用Cherrypick -n方法一样,您必须自己提交结果。)

,

您可以先还原它:

git revert <commit-specifier>

然后重置HEAD〜1:

git reset --soft HEAD~1

和git只添加您要还原的文件:

git add -- <revert_file>

现在您可以再次提交

git commit --amend

删除所有其他更改:

git checkout -- .
本文链接:https://www.f2er.com/2277504.html

大家都在问