git checkout c5f567 -- file1/to/restore file2/to/restore
git checkout 的手册提供了更多信息。
如果你想回滚到 c5f567
之前的提交,可以附加 ~1
(其中 1 是你想要回退的提交数,可以是任何数字):
git checkout c5f567~1 -- file1/to/restore file2/to/restore
顺便提一句,我一直对这个命令感到不舒服,因为它既用于普通的事情(在分支之间切换),又用于不寻常、破坏性的事情(放弃工作目录中的更改)。
有关命令中--
的含义,请参阅在Git中,--
表示什么?
还有一个新的git restore
命令,专门用于恢复已修改的工作副本文件。如果您的git足够新,可以使用此命令,但文档附带了警告:
此命令是实验性的。行为可能会发生变化。
develop
),则需要执行git checkout develop -- file/to/restore
命令来还原文件(请注意双横线)。 - Ohad Schneider使用diff命令可以快速查看对文件所做的更改:
git diff <commit hash> <filename>
然后要将特定文件还原到该提交中,请使用reset命令:
git reset <commit hash> <filename>
如果您有本地修改,则可能需要使用--hard
选项。
管理路标点的好工作流是使用标签来清晰地标记时间线上的点。我无法完全理解您的最后一句话,但您可能想要从以前的某个时间点分叉一个分支。要做到这一点,请使用方便的checkout命令:
git checkout <commit hash>
git checkout -b <new branch name>
当您准备合并这些更改时,可以将其与主干进行变基:
git checkout <my branch>
git rebase master
git checkout master
git merge <my branch>
git reset
,对于我来说,使用 git checkout <commit hash> <filename>
恢复文件的效果更好。 - Motti Stromgit checkout <commit hash> <filename>
对我有用。在我看来,这不应该是被接受的答案。git reset
不起作用。 - harpervillegit reset
来重置单个文件,你会收到错误提示fatal: Cannot do hard reset with paths
。 - sliergit reset --hard <commit hash> <filename>
。这会出现错误信息fatal: Cannot do hard reset with paths.
Motti Strom建议使用git checkout <commit hash> <filename>
。 - Hawkeye Parker您可以使用任何有关git提交的引用,包括SHA-1哈希值,以方便为准。重点在于命令看起来像这样:
git checkout [commit-ref] -- [filename]
rm
命令使用getopt(3)
解析其参数,getopt
是用于解析命令参数的命令。http://www.gnu.org/software/libc/manual/html_node/Getopt.html - Devygit checkout -- foo
这将重置foo
到HEAD。你还可以:
git checkout HEAD^ foo
回滚到上一个版本等。
git checkout -- foo
,以避免任何错误,如果 foo
是特殊的(如一个名为 -f
的目录或文件)。在Git中,如果不确定,请始终在所有文件和目录前加上特殊参数 --
。 - Mikko Rantalainen--
不是git的命令,也不是git特有的。它是bash内置命令,用于表示命令选项的结束。你也可以在许多其他bash命令中使用它。 - matthaeus^
视为转义字符,因此 git checkout HEAD~1 foo
对我来说可行。 - wolfram77从git v2.23.0开始,有一种新的git restore方法,它应该承担了git checkout
的部分责任(即使被接受的答案中提到git checkout
相当令人困惑)。请看在GitHub博客上对更改的重点介绍。
该命令的默认行为是使用来自source
参数的内容恢复工作树的状态(在您的情况下,将是提交哈希)。
所以根据Greg Hewgill的答案(假设提交哈希为c5f567
),命令应该是这样的:
git restore --source=c5f567 file1/to/restore file2/to/restore
或者,如果你想恢复到 c5f567 之前某个提交的内容:
git restore --source=c5f567~1 file1/to/restore file2/to/restore
如果要恢复到最近提交的版本,这是最常用的操作,可以使用这个更简单的命令。
git checkout HEAD file/to/restore
我刚遇到相同的问题,我发现这个答案最容易理解(commit-ref
是你想回滚到的日志更改的SHA值):
git checkout [commit-ref] [filename]
这将把旧版本放入你的工作目录中,然后你可以根据需要提交它。
如果您知道需要回退多少个提交,可以使用以下命令:
git checkout master~5 image.png
假设你当前在 master
分支上,并且你想要的版本是往前数第 5 次提交。
我想我找到了...来源于http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html
有时候你只是想回到某个点之前的状态,忘掉所有在这个点之后的更改,因为它们都是错误的。
首先输入:
$ git log
这会显示近期提交的一系列记录和它们的SHA1哈希值。
接下来,输入:
$ git reset --hard SHA1_HASH
可以将仓库恢复到特定的提交(commit)状态,并永久地擦除比这个提交更新的所有提交(commit)记录。
git push --force
命令。 - bshirley这对我有用:
git checkout <commit hash> file
然后提交更改:
git commit -a
git diff
时不要忘记加上--cached
参数。 - Geoffrey Hale