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. Возврат отменяет изменения, сделанные в конкретном коммите, не касаясь других коммитов, которые, возможно, пришли позже. Он применяет обратное (только), которое фиксирует.
Ответы
Ответ 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
является очевидным для коммитов, не связанных с объединением, для слияний вам нужно указать правильный родитель).