Подтвердить что ты не робот

Git вернуть определенные файлы

Я хочу сделать фиксацию фиксации, но только для некоторых файлов. (Не проверка, возврат. Если вы не знакомы с различием, продолжайте читать.)

Я пробовал это

git revert --no-commit abcdef123456 -- my/path/to/revert

И я получил эту ошибку

fatal: ambiguous argument 'my/path/to/revert': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

Но это именно то, что я сделал! (И да, my/path/to/revert находится в моем рабочем дереве.)

Моя рабочая теория заключается в том, что невозможно вернуть только некоторые файлы, а сообщение об ошибке Git вводит в заблуждение.

(Git 1.7.9.5)


Это не дубликат Возврат одного файла к предыдущей версии в git.

  • Этот вопрос (несмотря на название) относится к git -checkout. Касса восстанавливает файл в предыдущей версии, удаляя все коммиты после этой точки.
  • Мой вопрос относится к git -revert. Возврат отменяет изменения, сделанные в конкретном коммите, не касаясь других коммитов, которые, возможно, пришли позже. Он применяет обратное (только), которое фиксирует.
4b9b3361

Ответ 1

Более короткая последовательность, когда вы можете сделать короткий список того, что вы хотите:

git revert that_commit           # do the whole revert
git reset --hard HEAD^           # in what turns out to have been a throwaway commit
git checkout [email protected]{1} -- one/folder   # and just take what you want of the results

Ответ 2

Я не думаю, что git позволяет указать определенные файлы для возврата. Лучшее, что я могу придумать, это следующее:

git revert --no-commit <commit hash> # Revert, don't commit it yet
git reset # Unstage everything
git add yourFilesToRevert # Add the file to revert
git commit -m "commit message"
git reset --hard # Undo changes from the part of the revert that we didn't commit

Ответ 3

ответ vcsjones, вероятно, лучший способ, так как revert использует трехстороннюю систему слияния. Однако для многих случаев вы можете git apply -R (изменить) патч к файлу (или файлам), о котором идет речь, например:

git show <rev> -- path/to/file | git apply -R

(или git diff) - любой генератор различий, который позволяет ограничить результат конкретными файлами, но, но git show является очевидным для коммитов, не связанных с объединением, для слияний вам нужно указать правильный родитель).