获取以前的文件版本时出现git问题

获取以前的文件版本时出现git问题,git,github,Git,Github,我正在尝试获取以前版本的文件,如下所示: git checkout <git-hash> 但我得到的只是 Everything up-to-date 我做错了什么 当我这样做的时候 git签出123456——src/test.c git commit-m“从commit 123456中带回test.c” 我明白了 目前不在任何分支上 123456是散列我假设123456是一个旧提交的名称,而不是一个文件的名称-从问题上看不清楚,因为 推送时,推送的是完整提交(定义树

我正在尝试获取以前版本的文件,如下所示:

git checkout <git-hash>
但我得到的只是

Everything up-to-date
我做错了什么


当我这样做的时候


git签出123456——src/test.c


git commit-m“从commit 123456中带回test.c”

我明白了


目前不在任何分支上

123456是散列

我假设123456是一个旧提交的名称,而不是一个文件的名称-从问题上看不清楚,因为

推送时,推送的是完整提交(定义树的完整状态),而不是单个文件。
git-push-ab-master
命令与
git-push-ab-master:master
相同,这意味着“使用我的
master
版本在远程
ab
上更新
master
”。“所有内容都是最新的”错误告诉您,
master
分支的所有历史记录都已包含在远程
master
分支中

相反,您需要使用该文件的旧版本创建一个新的提交。您可以通过以下方式执行此操作:

# Make sure that you're back on the master branch first:
git checkout master 

git checkout 123456 -- src/test.c
git commit -m "Bringing back test.c from commit 123456"
git push ab master

123456
是您的文件名还是提交哈希?由于您没有提供文件名,我猜它是一个文件名,这意味着您签出了上次提交的版本。假设已经推送了提交,那么一切都是最新的似乎是合乎逻辑的。

当您这样做时:

git checkout 123456 
您现在处于“”模式,这意味着您所做的任何修改都不会被HEAD引用。
这就解释了为什么gitpush说“一切都是最新的”:您不在任何分支中,所以您没有对其进行任何修改

但如果你遵循的是,并且做到:

您仅修改给定文件的工作树,但仍在当前分支中。
src/test.c
将被修改,然后您可以添加它,并提交,移动当前分支的
HEAD

git checkout 123456 
git checkout 123456 -- src/test.c