Git остаться на том же коммите, но вернуть файлы - PullRequest
0 голосов
/ 08 апреля 2019

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

git init
touch 1; git add 1; git commit -m "1"
touch 2; git add 2; git commit -m "2"
touch 3; git add 3; git commit -m "3"

Это даст 3 коммита.Я хочу остаться на коммите # 3, но перевести стадию в состояние, которое было у меня на коммите # 2.Я попытался сделать следующее:

  • git reset --(hard|soft|mixed|merge|keep)
  • git checkout
  • git revert

Итак, после некоторой магической команды blah Мне нужен следующий результат:

  • git log показывает, что HEAD все еще находится на коммите # 3
  • ls . показывает, что у меня есть только файлы 1 и 2 в моей файловой системе.
  • git diff или git diff --cached показывает, что файл 3 был удален.

Я могу сделать git reset --hard <hash-2>, но это переместит HEAD совершить # 2.

Ответы [ 4 ]

1 голос
/ 14 апреля 2019

Вы можете поместить любое дерево (здесь: что из предыдущего коммита) в текущий индекс, как это:

git reset @~ -- .

, что дает вам

> git status --short
D  3
?? 3
1 голос
/ 08 апреля 2019

Один способ сделать это за 3 шага:

  • a=$(git rev-parse HEAD)
  • git reset --hard #hash-commit-2
  • git reset --soft $a
1 голос
/ 08 апреля 2019
git revert HEAD -n

С -n или --no-commit это отменяет изменения в рабочем дереве и индексе, но не создает фиксацию. HEAD может быть заменено другим эквивалентным коммитом. Если вы хотите зафиксировать возвращенное, вам нужно запустить git commit.

Если вы хотите отменить некоторые последующие коммиты, взяв, к примеру, случай в вашем комментарии,

git revert HEAD~3..HEAD -n
1 голос
/ 08 апреля 2019

Используйте это, чтобы вернуть определенные файлы к данному коммиту.Ваша ГОЛОВА останется прежней.

git checkout <commit-hash> -- file1/to/restore

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