Собрал здесь часто используемые мной команды системы контроля версий git

Создание репозитория

Репозиторий создается на github.com, bitbucket.org или в вашем gitLab. После чего система предложит набор команд, для инициализации репозитория на локальном компьютере.

Порядок команд инициализации проекта на локальном компьютере может выглядеть следующим образом:

Заходим в каталог своего проекта, который хоти разместить в системе контроля версий.

git init
git add .
git commit -m "first commit"
git remote add origin git@github.com:greenpeas/testproject.git
git push -u origin master

Списки игнорирования .gitignore

# комментарий — эта строка игнорируется
# не обрабатывать файлы, имя которых заканчивается на .a
*.a

#игнорировать файлы заканчивающиеся на о или а
*.[oa]

# НО отслеживать файл lib.a, несмотря на то, что мы игнорируем все .a файлы с помощью предыдущего правила
!lib.a

# игнорировать только файл TODO находящийся в корневом каталоге, не относится к файлам вида subdir/TODO
/TODO

# игнорировать все файлы в каталоге build/
build/

# игнорировать doc/notes.txt, но не doc/server/arch.txt
doc/*.txt

# игнорировать все .txt файлы в каталоге doc/
doc/**/*.txt

Запретить индексировать свойства файла (git ignore chmod)

Правим в .gitconfig (он находится в папке .git в корне проекта) секцию [core]:

[core]
        filemode = false

Либо в консоли:

git config core.filemode false

Удалить файл из индекса

Файл удалится из индекса, но останется на локальной машине. Так же он удалится у всех, кто сделает git pull. Это полезно в тех случаях, когда файл был создан и добавлен в индекс раньше, чем его занесли в .gitignore.

git rm --cached имя_файла

Работа с ветками

У нас имеется проект. Ветка master. Если хотим создать свою ветку проекта, то это делается перед работой (разработкой). Можно начать разрабатывать в мастер ветке. Главное не комититься. При создании ветки (или переходе в другую) все правки перейдут.

Просмотр имеющихся веток

git branch

Создаем новую ветку

git branch название_ветки

Заходим в неё

git checkout название_ветки

Ведем разработку… Комитимся в этой ветке:

git commit -am "коммент"

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

git checkout master
git pull

Переходим обратно в ветку разработки:

git checkout название_ветки

Сливаем нашу ветку с обновленным мастером:

git merge master

Отправляем нашу ветку на сервер:

git push origin название_ветки

Можно сделать быстрее, но мы останемся без обновленного мастера:

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

git pull origin master

Ведем разработку дальше. При необходимости делаем коммит, обновляем ветку с мастера, как было описано выше… И так сколько угодно раз.

Как только ветка окончательно готова, можно залить её в мастера. Для этого переходим в master и обновляем его с сервера:

git checkout master
git pull

Сливаем мастера с нашей веткой:

git merge название_ветки

Отправляем ветку master на сервер

git push

После выполнения задачи, для которой создавалась ветка, её можно удалить:

git branch -D название_ветки

Стянуть удаленную ветку и сразу переключиться на неё:

git fetch && git checkout issue2

Откат изменений на 2 коммита назад:

git reset --hard HEAD~2

Откат по хэшу коммита:

git reset --hard HEAD hash

Принудительный коммит (после отката):

git push -f origin master

без -f будет ругаться, что версия младше чем на удалёнке.

Сброситься до последнего коммита. Например если вы начала что то делать и передумали:

git reset --hard HEAD

Посмотреть список отличий локальной версии от удаленной

git diff --name-only master origin/master