Git отказывается сбрасывать / сбрасывать файлы

У меня есть проект с определенными js-файлами, которые я не могу обновить. Я запускаю OSX локально, а мой удаленный / промежуточный сервер - Linux (CentOS).

Сразу после локального клонирования моего проекта я заметил, что у меня есть все эти файлы со статусом git modified, Я никогда не изменял их, поэтому я пытался discard changes или же reset их, но они снова подходят. Изменение, которое есть в модификации, удаляет все строки и добавляет их снова.

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

Вот несколько строк из статуса git:

#   modified:   app/webroot/js/ckeditor/plugins/devtools/lang/el.js
#   modified:   app/webroot/js/ckeditor/plugins/devtools/lang/fa.js
#   modified:   app/webroot/js/ckeditor/plugins/devtools/lang/gu.js

ОБНОВЛЕНИЕ 1:

Теперь мне удалось зафиксировать вышеуказанные файлы, но промежуточный сервер заблокирован, потому что он не будет тянуть новые правки:

error: Your local changes to the following files would be overwritten by merge:
    app/webroot/js/ckeditor/_source/lang/ar.js
    app/webroot/js/ckeditor/_source/lang/bg.js
    app/webroot/js/ckeditor/_source/lang/bn.js
    app/webroot/js/ckeditor/_source/lang/cs.js
    ...
Aborting

Я не могу зафиксировать / нажать, потому что:

Updates were rejected because a pushed branch tip is behind its remote counterpart

Я старался:

git reset --hard

а также

git stash
git stash drop

Но они не работают, ничего не происходит.

ОБНОВЛЕНИЕ 2:

git diff дает мне:

The file will have its original line endings in your working directory.
warning: CRLF will be replaced by LF in app/webroot/js/ckeditor/_source/lang/fa.js.
The file will have its original line endings in your working directory.
warning: CRLF will be replaced by LF in app/webroot/js/ckeditor/_source/lang/gu.js.
The file will have its original line endings in your working directory.
...

4 ответа

Решение

Нормализовать окончания строк

Изменение, которое есть в модификации, удаляет все строки и добавляет их снова.

Это связано с тем, что переводимые строки изменяются между зафиксированными файлами и файлами на диске.

У Github есть удобная страница, подробно рассказывающая, как справиться с подобной проблемой, вкратце (для linux/OSX), первый шаг - изменить ваш git config, чтобы он сортировал окончания строк для вас:

git config --global core.autocrlf input

Затем зафиксируйте нормализацию концов строк:

git rm --cached -r .
# Remove everything from the index.

git reset --hard
# Write both the index and working directory from git's database.

git add .
# Prepare to make a commit by staging all the files that will get normalized.
# This is your chance to inspect which files were never normalized. You should
# get lots of messages like: "warning: CRLF will be replaced by LF in file."

git commit -m "Normalize line endings"
# Commit

И затем, окончания строк должны быть обработаны правильно. См. Справочную страницу на github для получения дополнительной информации или соответствующий раздел о форматировании git docs и пробелах.

Разрешение конфликтов между Linux и машиной

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

Сообщение об ошибке гласит: "Ваши локальные изменения в следующих файлах будут перезаписаны слиянием:", это означает, что они содержат локальные изменения, которые должны быть либо зафиксированы, либо отклонены перед продолжением. При условии нормального использования промежуточного сервера (он не имеет каких-либо преднамеренных изменений) локальные изменения могут быть отброшены. Например, сделайте следующее:

$ git fetch origin
# Retrieve updates

$ git reset --hard origin/master
# Forcibly change the current branch to match origin/master

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

Я просто потратил 2 часа (!) На ту же проблему с файлом.svg (Scalar Vector Graphics), который менялся после "возврата" без моего вмешательства.

Таким образом, файл отображается как измененный в "git status"; вернуть его удается, но он продолжает меняться, поэтому "тянуть" снова и снова не удается... так раздражает!

Не повезло с "git reset", "git ignore", "git untrack" и т. Д.

Наконец, я решил эту проблему, удалив файл из моей локальной системы (не "git delete", просто Shift + Delete) >> теперь запрос "pull" проходит, и файл выбирается из удаленного репозитория.

Так легко, я мог плакать!

Я всегда упоминал, чтобы убедиться, что ваш core.autocrlf установлен в false, как в " Git: застрял репо с использованием stash после нормализации crlf? "

git config --global core.autocrlf false

Также убедитесь, что у вас нет .gitattributes файл с eol директивы, которые будут пытаться преобразовать конец строки.
Основная идея такова: вы все еще видите это сообщение об ошибке, когда убедитесь, что нет никакого автоматического преобразования какого-либо рода?


Но на всякий случай учтите также: " Git rebase не работает," Ваши локальные изменения в следующих файлах будут перезаписаны слиянием ". Никаких локальных изменений? "

Я работаю на Mac, и это неясное изменение конфигурации, казалось, исправило все мои неприятности относительно неустановленных изменений, когда их не было.

git config --global core.trustctime false

Эта проблема неоднократно появлялась в хранилище листов символов Roll20 на машине с Ubuntu, и я мог решить ее,

#!/bin/sh

# Use in root dir of git repository
# Fixes some newline-related weirdness
git rm --cached -r .
git reset --hard

Но это прекратило полностью решать проблему сегодня, и, осмотрев Stack Overflow, я обнаружил, что виновником их .gitattributes файл:

# Auto detect text files and perform LF normalization
* text=auto

После git pull origin master, git status вернулся:

On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   Star Wars Revised RPG/SWRRPG-updated.html

no changes added to commit (use "git add" and/or "git commit -a")

Решение состояло в том, чтобы удалить * text=auto строка из.gitattributes:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   .gitattributes

no changes added to commit (use "git add" and/or "git commit -a")

Изменения на .gitattributes можно отбросить и Git все равно останется доволен.

Редактировать + 1d: повторил "трюк".gitattributes сегодня, но не сделал git status перед отменой изменений.gitattributes. Без причины, очевидной для меня (возможно, кеширование git status?) git status потом вернул это снова:

On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   Star Wars Revised RPG/SWRRPG-updated.html

no changes added to commit (use "git add" and/or "git commit -a")

Делать это снова, но с git status между ними работал.

Другие вопросы по тегам