Git: проверка файла из предыдущей фиксации и внесение в него изменений в HEAD


недавно я передал файл главе моего филиала, в котором есть ошибки. Мне нужно сделать следующие вещи:

  • получить этот файл из одного коммита, предшествующего HEAD

  • зафиксируйте этот файл обратно в голову

каков наилучший способ сделать это?

2 60

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'