Git:检出先前提交的文件并将其修改为HEAD

时间:2009-05-23 00:47:45

标签: git version-control

我最近向我的分支机构的HEAD提交了一个文件,其中有错误。我需要做以下事情:

      
  • 从HEAD之前的一次提交中获取该文件

  •   
  • 将该文件提交回HEAD

最好的方法是什么?

2 个答案:

答案 0 :(得分:95)

你几乎是自己说的:

首先从一次提交中获取文件:

$> git checkout HEAD~1 path/to/file.ext

然后提交它:

$> git commit -a -m 'Retrieved file from older revision'

如果只对上一次提交中存在的文件所做的更改,您甚至可以使用git-revert

$> git revert HEAD

我认为将它作为一个单独的提交会更好,因为它会准确地告诉您已经恢复的内容以及原因。但是,您可以使用--amend切换到git-commit将此压缩到上一次提交中。

答案 1 :(得分:0)

在这种情况下要小心:

Commit hash - File modified
aaaaaaa       index.php
bbbbbbb       test.php
ccccccc       index.php

Git checkout HEAD~1(或HEAD ^)index.php尝试将index.php文件签出到先前的HEAD哈希(bbbbbbb),但这不是真正的先前提交哈希文件,是ccccccc。在之前的HEAD哈希中,index.php仍保持不变,因为上次更改是在哈希ccccccc中进行的。

要将某个文件还原为影响该文件的先前提交哈希,请使用:

git log -n 2 --pretty=format:%h path/to/file.ext

忽略第一个哈希并获取第二个哈希,然后:

git checkout <second_hash> path/to/file.ext
git commit -m 'Revert this file to real previous commit'