Git:从前一个提交中检出一个文件,并将其修改为HEAD

我最近犯了一个文件给我的分支的HEAD,它有错误。 我需要做以下的事情:

  • 从HEAD之前的一个提交中获取该文件
  • 将该文件提交回HEAD

什么是最好的方式去做?

你几乎已经自己说过了:

首先从以前的一个提交中获取文件:

$> 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来将其--amend到之前git-commit

要小心,在这种情况下:

 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'