我想知道是否有办法快速反转提交的特定块。
我可以在两次提交之间生成diff
或HEAD
以查看差异。
如何扭转其中一个(或更好的,一组特定的帅哥)?
答案 0 :(得分:37)
git checkout -p $REF -- path/to/file
其中$REF
是一个引用名称或提交ID,用于指定要从中获取文件状态的提交。例如,要有选择地还原上次提交中所做的更改,请使用HEAD^
。
答案 1 :(得分:2)
git difftool $REF -- /path/to/file
其中$REF
是一个引用名称或提交ID,用于指定要从中获取文件状态的提交。例如,要有选择地还原在上次提交中所做的更改,请使用HEAD ^。
@cdhowie已经回答了这个问题,但是我觉得使用像meld
之类的交互式difftool来选择性地恢复旧的代码/行代码会更好一些,特别是如果有一个新引入的,那么找到代码中的错误。
答案 2 :(得分:1)
要从先前的提交中恢复已删除的文件,我在这里使用了答案:
Find and restore a deleted file in a Git repository
git checkout <deleting_commit>^ -- <file_path>
答案 3 :(得分:0)
要从特定提交中恢复一个或多个大块头,请这样做 - 本质上使用 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 ...
之类的方法不会始终如一地从特定提交中恢复块,而是从特定文件状态中选择部分 - 可能会丢失其他后续提交中的更改。