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'