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

Ответ 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.