35

我想知道是否有一种方法可以快速逆转特定的提交。

diff我可以在两次提交之间生成一个或HEAD查看差异。

我如何只反转那些帅哥中的一个(或者更好的是,一组特定的帅哥)?

4

4 回答 4

44
git checkout -p $REF -- path/to/file

例如,

git checkout -p HEAD^ myfile

引用名称或提交 ID在哪里$REF指定要从中获取文件状态的提交。例如,要选择性地还原上次提交中所做的更改,请使用HEAD^.

于 2010-11-22T17:27:59.580 回答
1
git difftool $REF -- /path/to/file

where$REF是指定要从中获取文件状态的提交的引用名称或提交 ID。例如,要选择性地还原上次提交中所做的更改,请使用 HEAD^。

@cdhowie 已经回答了这个问题,但我发现使用交互式 difftool 比较好,比如meld选择性地恢复旧的代码/行,特别是如果代码中有一个新引入的、难以发现的错误。

于 2013-08-28T20:27:24.063 回答
1

要从特定提交中恢复一个或多个大块,请这样做 -add -p本质上使用:

git revert --no-commit <commit>…​ 
git reset                              # unstage things
git add -p [OPTIONS] [<pathspec>…​]     # choose hunks interactively
git restore .                          # wipe the rest (in root directory)
... maybe further changes ...
git commit [--fixup] ...

未来的 git 版本可能会git revert -p直接支持...

注意:诸如此类的方法git checkout/restore -p ...不会始终从特定提交中恢复大块,而是从某个文件状态中选择部分 - 可能会丢失其他后续提交中的更改。

于 2021-01-28T12:12:47.353 回答
0

为了从以前的提交中恢复已删除的文件,我在这里使用了答案:

在 Git 存储库中查找和恢复已删除的文件

git checkout <deleting_commit>^ -- <file_path>
于 2012-06-22T14:09:09.720 回答