Skip to content

Conflicts Git

h8nor edited this page Feb 28, 2025 · 6 revisions

Q: Как вернуть потерянный коммит (и указатель HEAD) после git rebase & git push -f или git chekout/branch?

A: Для восстановления воспользуйтесь последними записями локального журнала.

  • Команда просмотра локального журнала изменений git reflog. В первой колонке будет указан SHA коммита.
  • Использовать комманду git reset --hard <SHA1> с SHA коммита, который нужно восстановить в локальном репозитории. Требуется выбрать коммит который является продолжением ветви.
  • На следующем этапе можно изменить комментарий коммита git commit --amend
  • Отправить коммит в удаленный репозиторий командой git push origin

Q: Как удалить BOM у проиндексированных файлов в Windows?

При сохранении файла из текстового редактора "Блокнот" в кодировке UTF‑8 записываются служебные символы BOM. Сторонние приложения как dos2unix могут удалить BOM, но и меняют символы переноса строки Windows с CRLF на LF.

A: Удаление BOM без замены символа переноса строки будет выполнять клиентский хук.

  • Нужно сохранить клиентский хук в директорию <REPO>\.git\hooks без расширения .sh
    Хук будет выполняться перед сохранением изменений (commit).

  • Для Windows необходимо задать настройку git config --global core.autocrlf true

Q: Как изменить символ перевода строки у файлов в репозитории?

A: Когда автор не задал свойства бывает невозможно проследить дальнейшие изменения.

  • Сначала нужно узнать символы перевода строки (line‑ending) в репозитории по команде git ls-files -mo --eol. Атрибут -mo выберет только изменённые файлы.
  • Далее нужно открыть файл .gitattributes и прописать свойство eol
# для всех файлов
*.js		text	eol=LF
# или для конкретного файла
<FILE>.js	text	eol=LF
  • Если символы перевода строки (line‑ending) будут заменены, то после добавления файлов в индекс в консоли появится предупреждение
warning: CRLF will be replaced by LF in <FILE>.
The file will have its original line endings in your working directory.
  • По завершению нужно сохранить изменения (commit); до этого изменения нельзя будет увидеть.

Репозиторий для практики: https://github.com/teamtam/git-line-endings