Частые вопросы по Git
Здесь я собрал вопросы связанные с гитом и ответы на них.
Я добавляю те вопросы, с которыми сталкиваюсь сам, поэтому список будет постоянно пополняться или сделаю следующую часть.
Исчерпывающих ответов на вопросы, а так же подробных описаний гит команд тут не будет, но будет ясно в каком направлении гуглить.
Как отменить последний коммит?
Для этого используем команду git reset, ее можно применить в двух вариациях.
Первый вариант отменяет все изменения:
git reset --hard HEAD~1
Второй вариант, если нужно сохранить всё, что вы сделали, но еще не успели закоммититье:
git reset --soft HEAD~1
HEAD~1 означает один коммит до HEAD, т.е. до текущего положения.
Отличия между «git pull» и «git fetch»?
git pull — это, по сути, git fetch, после которого сразу же следует git merge.
git fetch получает изменения с сервера и сохраняет их в refs/remotes/. Это никак не влияет на локальные ветки и текущие изменения. А git pull вливает все эти изменения в локальную копию.
Как отменить «git add» до коммита?
Если вы выполнили git add для какого либо файла по ошбике и хотите это отменить, то выполните команду:
git reset имя_файла
Это поможет вслучае того, если коммит еще не был сделан
Как переименовать локальную ветку?
Это можно сделать командой:
git branch -m oldname newname
Как добавить пустую папку в репозиторий?
Такая возможность гитом не поддерживается, но можно схитрить. Для того чтобы гит заметил пустую папку нужно создать в ней пустой (0 байт) файл с именем .gitkeep (имя может быть любое).
Сохранить исходники в архив
Можно экспортировать все исходники из репозитория командой git archive, например:
git archive --format zip --output /folder/source.zip master
Отменить все изменения, кроме тех, что уже добавлены в планируемый коммит
Сделать это можно командой
git checkout -- .
Как восстановить удалённый файл?
Чтобы восстановить удаленный файл, для начала необходимо найти последний коммит, где этот файл ещё существует. Сделать это можно командой:
git rev-list -n 1 HEAD -- file_name
Дальше восстанавливаем файл:
git checkout тут_найденный_коммит^ -- file_name
Я добавляю в .gitignore файлы, а их все равно отслеживает?
Скорее всего эти файлы уже были в индексе, команда:
git rm --cached
позволяет убрать файлы из индекса, соответственно .gitignore на них подействует.