Git: извлечение файла из предыдущего коммита и внесение изменений в HEAD - PullRequest
62 голосов
/ 23 мая 2009

Я недавно отправил файл в ГОЛОВУ моей ветки, в которой есть ошибки. Мне нужно сделать следующие вещи:

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

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

Ответы [ 2 ]

95 голосов
/ 23 мая 2009

Вы практически сказали это сами:

Сначала верните файл с одного коммита до:

$> 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.

0 голосов
/ 13 ноября 2014

Будьте осторожны, в этом сценарии:

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...