Git Невозможно вытащить, не загружать файлы
Я прочитал все подобные вопросы по этому поводу; кажется, что ни одно из следующего не сработало:
Delete offending files
git reset --hard HEAD
git stash
git pull
Почти каждая комбинация, сменяющая изменения и вытаскивание из репозитория, приводит к невозмутимым файлам. Я бы хотел отменить все локальные изменения и просто использовать удаленный доступ, но я не могу снова клонировать (ограничения пропускной способности и интернет-использования с разработчиком, пытающимся это сделать). Как мне это сделать?
Просто попробовал:
git stash
git pull
Также не работал.
Дополнительная информация
Существует одна локальная фиксация, и у восходящего потока есть фиксация. Я таким образом пробовал git pull --rebase
, но он все еще не работает должным образом... Это дает мне ошибки - "выход из-за неразрешенного конфликта". Если я делаю git stash, git reset --hard HEAD, git pull --rebase
, я получаю сообщение об ошибке: "pull невозможно, без изменений..."
Ответы
Ответ 1
Скажем, что пульт origin
и ветка master
, и говорят, что у вас уже есть master
, вы можете попробовать следующее:
git fetch origin
git reset --hard origin/master
Это в основном просто берет текущую ветвь и указывает ее на HEAD
удаленной ветки.
ПРЕДУПРЕЖДЕНИЕ. Как указано в комментариях, это отбросит ваши локальные изменения и , переписывая все, что находится в начале.. p >
Или вы можете использовать команды сантехники, чтобы сделать по существу то же самое:
git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard
EDIT: Я хотел бы кратко объяснить, почему это работает.
В папке .git
можно сохранить фиксации для любого количества репозиториев. Поскольку хеш фиксации на самом деле является методом проверки для содержимого фиксации, а не только случайно генерируемым значением, он используется для сопоставления наборов фиксаций между репозиториями.
Ветвь - это только именованный указатель на данный хеш. Вот пример:
$ find .git/refs -type f
.git/refs/tags/v3.8
.git/refs/heads/master
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
Каждый из этих файлов содержит хэш, указывающий на фиксацию:
$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b
Все они предназначены для внутреннего механизма хранения git и работают независимо от рабочего каталога. Выполняя следующее:
git reset --hard origin/master
git будет указывать текущую ветвь с тем же значением хэша, на которое указывает начало/мастер. Затем он принудительно изменяет рабочий каталог в соответствии с файловой структурой/содержимым в этом хеше.
Чтобы увидеть это на работе, попробуйте следующее:
git checkout -b test-branch
# see current commit and diff by the following
git show HEAD
# now point to another location
git reset --hard <remote>/<branch>
# see the changes again
git show HEAD
Ответ 2
Мне повезло с
git checkout -f <branch>
в аналогичной ситуации.
http://www.kernel.org/pub//software/scm/git/docs/git-checkout.html
Отменить удаление в GIT
Ответ 3
Решено, используя следующий набор команд:
git reset --hard
git pull --rebase
git rebase --skip
git pull
Трюк состоит в том, чтобы переустановить изменения... У нас были проблемы с перезагрузкой одного тривиального коммита, поэтому мы просто пропустили его с помощью git rebase -skip (после копирования файлов).
Ответ 4
Предполагая, что вы хотите отбросить все изменения, которые вы имеете, сначала проверьте вывод git status
. Для любого файла, который говорит "unmerged" рядом с ним, запустите git add <unmerged file>
. Затем выполните git reset --hard
. Это позволит git избавиться от любых локальных изменений, кроме файлов без следа.
Ответ 5
Я решил, что с помощью git удалите незагруженный файл локально.
$ git rm <the unmerged file name>
$ git reset --hard
$ git pull --rebase
$ git rebase --skip
$ git pull
Already up-to-date.
Когда я отправляю git commit afterward:
$ git commit . -m "my send commit"
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Ответ 6
Ответ Райана Стюарта был почти там. В случае, когда вы фактически не хотите удалять локальные изменения, существует рабочий процесс, который вы можете использовать для объединения:
- Запустите
git status
. Он предоставит вам список несвязанных файлов.
- Объединить их (вручную и т.д.).
- Выполнить
git commit
Git передаст только слияния в новый коммит. (В моем случае у меня были добавленные дополнительные файлы на диске, которые не были сосредоточены на этом коммите.)
Git, тогда считается успешным слияние и позволяет двигаться вперед.
Ответ 7
Если вам когда-нибудь удастся получить эту проблему после запуска git fetch
, а затем git не позволяет вам запускать git pull
из-за конфликта слияния (как измененных/немаркированных файлов, так и сделать вас более расстроенными, он не покажет вам никаких маркеров конфликта в файле, так как он еще не объединен). Если вы не хотите потерять работу, вы можете сделать следующее.
выполните этап файла.
$ git add filename
затем запишите локальные изменения.
$ git stash
вытащите и обновите рабочий каталог
$ git pull
восстановить локальный измененный файл (git будет автоматически сливаться, если это возможно, в противном случае разрешить его)
$ git stash pop
Надеюсь, это поможет.
Ответ 8
Существует решение, даже если вы не хотите удалять свои локальные изменения. Просто исправьте неотправленные файлы (с помощью git add
или git remove
). Тогда сделай git pull
.