2011-03-29 35 views
2

我试图得到一个文件的以前的版本是这样的:git的问题越来越先前的文件版本

git checkout <git-hash> 

在此之后,我看到在我的HD文件是以前的版本。我怎样才能将 这个版本推送到服务器?我试过如下:

git push ab master 

,但我得到的是

Everything up-to-date 

我在做什么错?


当我做

git checkout 123456 -- src/test.c

git commit -m "Bringing back test.c from commit 123456"

我得到

Not currentyly on any branch

123456哈希

回答

2

我假设123456是旧提交的名称,而不是文件的名称 - 从问题中看不清楚,因为Ben Hocking points out

当你推送时,你推送一个完整的提交(它定义了一个树的完整状态)而不是单个文件。 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 
+0

只是去显示当人们假设发生了什么... – 2011-03-29 14:41:43

0

123456您的文件名,或者你的提交哈希#:你可以做到这一点?由于您没有提供文件名,我猜这是一个文件名,这意味着您检出了上次提交的版本。假定提交已经被推送,那么看起来合乎逻辑的是,所有内容都是最新的。

2

当你这样做:

git checkout 123456 

你现在是在一个“detached HEAD”模式,这意味着你做不被HEAD引用的任何修改。
这就解释了为什么git push会说“一切都是最新的”:你不在任何分支,所以你没有进行任何修改。

但是,如果你遵循Markadvice做:

git checkout 123456 -- src/test.c 

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