Небольшая заметка по основным командам GIT. Не смотря на огромный выбор десктопных клиентов и фич для IDE они частенько глючат, а консоль всегда исправно отрабатывает команды. Поэтому будь то новичок или профи я бы советовал использовать консоль, тем более в IDEA давно уже встроена консоль доступная в 1 клик.
Создать новый репозиторий:
1 |
git init project-name |
Если вы планируете клонировать его по ssh с удаленной машины, также скажите:
1 |
git config --bool core.bare true |
… иначе при git push вы будете получать странные ошибки вроде:
Refusing to update checked out branch: refs/heads/master
By default, updating the current branch in a non-bare repository
is denied, because it will make the index and work tree inconsistent
with what you pushed, and will require ‘git reset —hard’ to match
the work tree to HEAD.
Клонировать репозиторий с удаленной машины:
1 |
git clone git@bitbucket.org:afiskon/hs-textgen.git |
Если хотим пушить один код в несколько репозиториев:
1 |
git remote add remotename git@gitlab.example.ru:repo.git |
Добавить файл в репозиторий:
1 |
git add text.txt |
Удалить файл:
1 |
git rm text.txt |
Текущее состояние репозитория (изменения, неразрешенные конфликты и тп):
1 |
git status |
Сделать коммит:
1 |
git commit -a -m "Commit description" |
Сделать коммит, введя его описание с помощью $EDITOR:
1 |
git commit -a |
Замержить все ветки локального репозитория на удаленный репозиторий (аналогично вместо origin можно указать и remotename, см выше):
1 |
git push origin |
Аналогично предыдущему, но делается пуш только ветки master:
1 |
git push origin master |
Запушить текущую ветку, не вводя целиком ее название:
1 |
git push origin HEAD |
Замержить все ветки с удаленного репозитория:
1 |
git pull origin |
Аналогично предыдущему, но накатывается только ветка master:
1 |
git pull origin master |
Накатить текущую ветку, не вводя ее длинное имя:
1 |
git pull origin HEAD |
Скачать все ветки с origin, но не мержить их в локальный репозиторий:
1 |
git fetch origin |
Аналогично предыдущему, но только для одной заданной ветки:
1 |
git fetch origin master |
Начать работать с веткой some_branch (уже существующей):
1 |
git checkout -b some_branch origin/some_branch |
Создать новый бранч (ответвится от текущего):
1 |
git branch some_branch |
Переключиться на другую ветку (из тех, с которыми уже работаем):
1 |
git checkout some_branch |
Получаем список веток, с которыми работаем:
1 |
git branch # звездочкой отмечена текущая ветвь |
Просмотреть все существующие ветви:
1 |
git branch -a # | grep something |
Замержить some_branch в текущую ветку:
1 |
git merge some_branch |
Удалить бранч (после мержа):
1 |
git branch -d some_branch |
Просто удалить бранч (тупиковая ветвь):
1 |
git branch -D some_branch |
История изменений:
1 |
git log |
История изменений в обратном порядке:
1 |
git log --reverse |
История конкретного файла:
1 |
git log file.txt |
Аналогично предыдущему, но с просмотром сделанных изменений:
1 |
git log -p file.txt |
История с именами файлов и псевдографическим изображением бранчей:
1 |
git log --stat --graph |
Изменения, сделанные в заданном коммите:
1 |
git show d4253edf5358ce06fbc5bb76a58c5ca4a58c5ca4 |
Посмотреть, кем в последний раз правилась каждая строка файла:
1 |
git blame file.txt |
Удалить бранч из репозитория на сервере:
1 |
git push origin :branch-name |
Откатиться к конкретному коммиту (хэш смотрим в «git log»):
1 |
git reset --hard d4253edf5358ce06fbc5bb76a58c5ca4a58c5ca4 |
Аналогично предыдущему, но файлы на диске остаются без изменений:
1 |
git reset --soft d4253edf5358ce06fbc5bb76a58c5ca4a58c5ca4 |
Попытаться обратить заданный commit (но чаще используется branch/reset + merge):
1 |
git revert d4253edf5358ce06fbc5bb76a58c5ca4a58c5ca4 |
Просмотр изменений (суммарных, а не всех по очереди, как в «git log»):
1 |
git diff # подробности см в "git diff --help" |
Используем vimdiff в качестве программы для разрешения конфликтов (mergetool) по умолчанию:
1 |
git config --global merge.tool vimdiff |
Отключаем диалог «какой mergetool вы хотели бы использовать»:
1 |
git config --global mergetool.prompt false |
Отображаем табы как 4 пробела, например, в «git diff»:
1 |
git config --global core.excludesfile ~/.gitignore_global |
Разрешение конфликтов (когда оные возникают в результате мержа):
1 |
git mergetool |
Создание тэга:
1 |
git tag some_tag # за тэгом можно указать хэш коммита |
Удаление untracked files:
1 |
git clean -f |
«Упаковка» репозитория для увеличения скорости работы с ним:
1 |
git gc |
Иногда требуется создать копию репозитория или перенести его с одной машины на другую. Это делается примерно так:
1 2 3 4 5 |
mkdir -p /tmp/git-copy cd /tmp/git-copy git clone --bare git@example.com:afiskon/cpp-opengl-tutorial1.git cd cpp-opengl-tutorial1.git git push --mirror git@example.com:afiskon/cpp-opengl-tutorial2.git |
Следует отметить, что Git позволяет использовать короткую запись хэшей. Вместо «d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4» можно писать «d8578edf» или даже «d857».