Как восстановить файл только в Git? - PullRequest
0 голосов
/ 30 октября 2018

Я обновил файлы и зафиксировал их, например,

git add *lots of files*
git add b.txt
git commit -m 'Update files'

Теперь я понимаю, что на самом деле хочу внести изменения в b.txt в другом коммите. Я хочу удалить изменения в b.txt из моего коммита, но я хочу сохранить изменения в файловой системе. Если бы b.txt был новым файлом, я мог бы сделать это с

git rm --cached b.txt

Но это не работает для возврата b.txt к его предыдущему состоянию в области подготовки.

По сути, я хочу проверить прямо в области подготовки без изменения моих локальных файлов. Есть ли способ сделать это с помощью одной команды в Git?

Этот вопрос не является дубликатом Сброс или возврат определенного файла к определенной ревизии с помощью Git? , потому что этот спрашивающий хочет изменить рабочее дерево, но здесь я не хочу менять рабочее дерево.

Ответы [ 4 ]

0 голосов
/ 30 октября 2018

По сути, я хочу проверить прямо в промежуточной области без изменения моих локальных файлов. Есть ли способ сделать это с помощью одной команды в Git?

Вы можете отменить изменения в одном файле или каталоге из фиксации, но сохранить их в неустановленном состоянии.

git reset commit-id <file>

0 голосов
/ 30 октября 2018

Что вы можете сделать, чтобы создать новую ветку на вашем фактическом коммите, а затем сбросить ваш мастер обратно в состояние предварительного просмотра. Тогда ваш коммит находится в новой ветке.

git branch new_branch
git reset --hard HEAD~1
git checkout new_branch

как то так.

0 голосов
/ 30 октября 2018

Полагаю, переписывание истории - это хорошо для вас. Сначала отмените коммит, используя reset --soft, который сохранит добавленные файлы. Затем удалите файл из архива и, наконец, подтвердите снова:

git reset --soft HEAD~
git reset -- b.txt
git commit -C HEAD@{1}

(Подтверждение с помощью -C HEAD@{1} для сохранения старого сообщения о фиксации.)

0 голосов
/ 30 октября 2018

Вы можете сделать git checkout для определенного файла для определенного коммита. Например, если коммит a12345 содержит изменения b.txt, к которым вы хотите вернуться, вы можете выполнить:

git checkout a12345 -- path/to/file/to/restore/b.txt

Подробнее см. Команду git checkout .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...