Git: проверка файла из предыдущей фиксации и внесение в него изменений в HEAD
недавно я передал файл главе моего филиала, в котором есть ошибки. Мне нужно сделать следующие вещи:
- получить этот файл из одного коммита, предшествующего HEAD
- зафиксируйте этот файл обратно в голову
каков наилучший способ сделать это?
2 ответа:
ты практически сам сказал:
сначала верните файл из одной фиксации:
$> 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
.
будьте осторожны, в этом случае:
Commit hash - File modified aaaaaaa index.php bbbbbbb test.php ccccccc index.php
git checkout HEAD~1 (или HEAD^) index.php пытается проверить индекс.php-файл для предыдущего хэша головы (bbbbbbb), но это не настоящий предыдущий хэш-файл фиксации, это ccccccc. В предыдущей главе хэш-индекс.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'