MyTetra Share
Делитесь знаниями!
Самые типичные ошибки и вопросы, связанные с Git, и удобные способы их решения
Время создания: 07.05.2018 09:58
Текстовые метки: git help
Раздел: Git
Запись: Velonski/mytetra-database/master/base/1525669114re3qizybr6/text.html на raw.githubusercontent.com

Если вы хотите получше узнать те части git, про которые раньше боялись спросить, то этот список для вас. Тут собраны наиболее типичные ситуации и способы их решения как из личного опыта автора, так и собранные по всему Интернету.


Ошибка в комментарии к коммиту

Если коммит еще не был отправлен на сервер (push), то можно воспользоваться простой командой, позволяющей редактировать текст сообщения к последнему коммиту.


git commit --amend



Как отменить последний коммит?

Можно использовать git reset, вот так:


git reset --hard HEAD~1


HEAD~1 означает один коммит до HEAD т.е. до текущего положения. Стоит заметить, что это «ядерный» способ, который отменит все изменения. Если вам нужно сохранить всё, что вы сделали, но еще не успели закоммитить, используйте:


git reset --soft HEAD~1


Удалить ветку на сервере

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 reset имя_файла


Как разрешать конфликты слияния?

Используйте git mergetool, которая предоставляет удобный интерфейс для разрешения конфликтов.


Удалить все локальные файлы и директории, которые не отслеживаются гитом из вашей текущей копии

Осторожно! Лучше сделайте бэкап перед этим.


git clean -f -d


Клонировать все ветки с сервера

Скорее всего, вы это уже сделали, а ветки просто скрыты. Вот команда, чтобы показать их все:


git branch -a


Можно использовать 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


Как добавить пустую директорию в репозиторий?

Никак! Это просто не поддерживается и считается, что вам это не нужно. Но есть один трюк. Можно создать файл .gitignore в нужной директории со следующим содержимым:


# Игнорируем всё в этой директории

*

# Кроме самого файла .gitignore

!.gitignore


Экспортирование исходников, аналогично «svn export»

Используйте git archive, например так:


git archive --format zip --output /путь/к/файлу/файл.zip master


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

git checkout -- .


Создать новую ветку на сервере из текущей локальной ветки

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 помнить пароль при работе с https

Для запоминания на 15 минут:


git config --global credential.helper cache


Можно настроить и более долгий период:


git config --global credential.helper "cache --timeout=XXXX"

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования