Частые вопросы по Git

Частые вопросы по 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 на них подействует.

Хостинг для ваших проектов