Типичные ошибки при работе с git и способы их решения
Ошибка в комментарии к коммиту:
Если коммит еще не был отправлен на сервер (push), то можно воспользоваться простой командой, позволяющей редактировать текст сообщения к последнему коммиту.
Как отменить последний коммит?
Можно использовать git reset, вот так:
HEAD~1 означает один коммит до
HEAD т.е. до текущего положения. Стоит заметить, что это “ядерный” способ, который отменит все изменения. Если вам нужно сохранить всё, что вы сделали, но еще не успели закоммитить, используйте:
Удалить ветку на сервере:
Код:
git push origin --delete имя_ветки
В чём разница между “git pull” и “git fetch”?
git pull — это по сути git fetch после которого сразу же следуюет git merge. git fetch получает изменения с сервера и сохраняет их в refs/remotes/. Это никак не влияет на локальные ветки и текущие изменения. А git pull уже вливает все эти изменения в локальную копию.
Как отменить “git add” до коммита?
Вы выполнили git add имя_файла случайно и хотите отменить добавление этого файла. Если коммит еще не был сделан, то поможет:
Как разрешать конфликты слияния?
Используйте
, которая предоставляет удобный интерфейс для разрешения конфликтов.
Удалить все локальные файлы и директории, которые не отслеживаются гитом из вашей текущей копии:
Осторожно! Лучше сделайте бэкап перед этим.
Клонировать все ветки с сервера:
Скорее всего, вы это уже сделали, а ветки просто скрыты. Вот команда, чтобы показать их все:
Можно использовать git checkout origin/имя_ветки, чтобы посмотреть на нужную ветку. Или git checkout -b имя_ветки origin/имя_ветки, чтобы создать локальную ветку, соответствующую удалённой.
Переименовать локальную ветку:
Код:
git branch -m oldname newname
Вернуться к любому коммиту:
Можно использовать reset, как показано ранее, но это будет означать, что вы хотите навсегда вернуться к тому состоянию, в котором вы были, а не просто посмотреть на него (для этого надо сделать checkout). Идентификатор коммита должен быть такой, как он прописан в выводе команды git log.
Код:
git reset --hard идентификатор_коммита
Еще раз повторю, что это отменит все текущие изменения, так что убедитесь, что это действительно то, что вам нужно. Или используйте
--soft вместо
--hard.
Удалить подмодуль (submodule):
Создание подмодулей используется довольно редко, но иногда они всё таки нужны. Так что вот что вам нужно:
Код:
git submodule deinit submodulename
git rm submodulename
git rm --cached submodulename
rm -rf .git/modules/submodulename
Перезаписать локальные файлы во время git pull:
Вам снова поможет git reset:
Код:
git fetch --all
git reset --hard origin/master
Экспортирование исходников, аналогично “svn export”:
Используйте git archive, например так:
Код:
git archive --format zip --output /путь/к/файлу/файл.zip master
Отменить все изменения, кроме тех, что уже добавлены в планируемый коммит:
Создать новую ветку на сервере из текущей локальной ветки:
Код:
git config --global push.default current
git push -u
Восстановить удалённый файл:
Сначала нужно найти последний коммит, где файл еще существовал:
Код:
git rev-list -n 1 HEAD -- имя_файла
Потом восстановить этот файл:
Код:
git checkout найденный_коммит^ -- имя_файла
Вернуть один конкретный файл на состояние, в котором он был в каком-либо коммите:
Примерно как в прошлом примере, только чуть проще:
Код:
git checkout идентификатор_коммита имя_файла
Сделать так, чтобы git игнорировал изменения прав файлов:
Код:
git config core.fileMode false
Заставить git помнить пароль при работе с
You must be registered for see links
:
Для запоминания на 15 минут:
Код:
git config --global credential.helper cache
Можно настроить и более долгий период:
Код:
git config --global credential.helper "cache --timeout=XXXX"