Сброс до одного файла, но обратно с текущим содержимым без изменений - PullRequest
2 голосов
/ 04 июня 2019

Я по ошибке удалил много предыдущего контента из текущего рабочего файла foo. md,

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

Обратитесь к ответу git - Полный сброс одного файла - Переполнение стека

  git checkout HEAD -- my-file.txt

он перейдет к своему состоянию в индексе с HEAD, но побочным эффектом удалит сегодняшние модификации.

Как сделать сброс на вчерашний статус и вернуться к текущему с неизменным файлом?

Ответы [ 3 ]

3 голосов
/ 04 июня 2019

Зафиксировать файл во временной ветке

# create the temp branch
git checkout -b temp

# make sure the index is empty of changes
git reset

# Add and commit your file
git add my-file.txt
git commit -m "temp commit"

Тогда вы сможете вернуться в свою ветку и свободно переключаться между двумя состояниями:

git checkout your-branch

# then to switch between states
git checkout temp -- my-file.txt
git checkout HEAD -- my-file.txt
1 голос
/ 04 июня 2019

Если вы хотите извлечь файл из HEAD, вам кажется, что вы его еще не зафиксировали.Поэтому проще всего было бы использовать git stash:

git stash

Теперь изменения сохраняются в стеке, и все как в HEAD (кроме новых созданных файлов, я думаю)

Теперь, еслиВы хотите вернуться к тому, что вы изменили, используя stash pop:

git stash pop

Это извлечет последние сохраненные изменения из стека, и ваши изменения, которые вы сделали сегодня, вернутся в рабочий каталог.

0 голосов
/ 13 июня 2019

Иногда, когда кто-то допускает ошибки такого рода, просто чтобы провести параллельное сравнение обеих версий, это самый простой способ найти и восстановить удаленные строки.

Для этого есть еще одна полезная команда git: git difftool. Он запустит ваш любимый difftool (что-то вроде meld или beyond compare), вы сможете сравнить содержимое текущего foo.md и предыдущей версии.

git difftool HEAD~ foo.md

также

git difftool --dir-diff HEAD~

полезно при сравнении всех файлов одновременно.

...