我最近向我的分支机构的HEAD提交了一个文件,其中有错误。我需要做以下事情:
最好的方法是什么?
答案 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'