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

Отменить git pull

Вопросы, которые я видел для отмены git, немного отличаются от моих.

Это то, что я сделал:

В каталоге A (не репо) есть проект. Я инициализировал в нем репозиторий, добавил файлы, но ничего не сделал. Затем я вытащил из репозитория B, который перезаписал кучу моих поэтапных файлов.

У меня было впечатление, что я могу использовать git reset --hard для отмены слияния. Конечно, только что проверил ГЛАВУ коммитов, которые я только что втянул.

Я должен был разветкить и совершить что-то, прежде чем я это сделал, задним числом приятно. Есть ли способ вернуть мои старые неустановленные файлы?

4b9b3361

Ответ 2

A git pull совпадает с git fetch + git merge. Это шаг слияния, который заменил ваши изменения. Чтобы вернуться к состоянию перед слиянием, используйте git log, чтобы найти последний коммит, а затем используйте git reset --hard 1234abcd, где 1234abcd - хэш требуемого коммита.

Обратите внимание, что после reset git pull снова слияние изменений. Чтобы вернуться к изменениям навсегда, используйте git revert, который создаст дополнительную фиксацию, изменяющую изменения.

Ответ 3

Либо просто reset для предыдущего HEAD (т.е. фиксация, которую вы имели в вашем репозитории, которая не была обновлена ​​с удаленного), или используйте git reflog. Последний отображает список действий, которые были сделаны в вашем репозитории, команда git pull должна быть частью этого. Просто git reset --hard X до состояния перед этой командой.

Или просто откройте предыдущую HEAD (вы можете удалить/перезаписать предыдущую ветку), внесите изменения и git снова вытащите...

Ответ 4

Думаю, вы не сможете полностью восстановить себя. Лучшее, что вы можете сделать, это git status, чтобы проверить, какие файлы (файлы) по-прежнему неповреждены. Если незафиксированные файлы здесь отсутствуют, они теряются.

В следующий раз рассмотрите возможность использования git stash до git pull или, еще лучше, используйте git fetch.


ЕСЛИ ВЫ РАСШИРЕННЫЙ GIT ПОЛЬЗОВАТЕЛЬ, И ФАЙЛЫ ДЕЙСТВИТЕЛЬНО ВАЖНЫ:

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

Если вы действительно этого хотите, прочитайте следующее:

Ответ 5

Обновление 17 января 2011 г., 18:53

Просто перечитайте свой вопрос. Я упустил из виду, что вы тянули проект b, а не копировали файлы в свой проект. Не уверен, что мой ответ по-прежнему сохраняется с учетом вашего сценария. Я считаю, что лучше всего следовать geoffreyd answer и проверить ответ на вопрос StackOverflow Восстановить добавленный файл после выполнения git reset --hard HEAD ^.

Оригинальный ответ

Просто выполните git checkout -- <file>.

Вот пример, который я использовал для подтверждения выше...

# Create a test directory and some test files
$ mkdir blah
$ echo "I've been overwritten" > test1.txt
$ cd blah
$ echo "I'm the real test1.txt" > test1.txt
$ git init .
Initialized empty Git repository in /Users/matthew/blah/.git/
$ git add .
$ cp ~/test1.txt .
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   test1.txt
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   test1.txt
#
$ cat test1.txt
I've been overwritten
$ git checkout -- test1.txt
$ cat test1.txt
I'm the real test1.txt

Когда вы выполняете git status, он говорит вам использовать git checkout -- <file> для отмены изменений в рабочем каталоге. Если я правильно прочитаю ваш вопрос, что вы хотите сделать.