Mikhail Voronin

Шпаргалка по Git

     

 Оффтоп

Клонирование

Если используется аутентификация по ssh-ключу:
  1. $ git clone https://username@gitsrv/opt/git/repository.git
Если используется аутентификация по паролю:
  1. $ git clone https://username:password@gitsrv/opt/git/repository.git

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

Показать все ветки:
  1. $ git branch
Создать новую ветку:
  1. $ git branch <branch-name>
Перейти в новую ветку:
  1. $ git checkout <branch-name>
Создать новую ветку и перейти в неё:
  1. $ git checkout -b <branch-name>
Удалить локальную ветку:
  1. $ git branch -d <branch-name>
Удалить ветку из удаленного репозитория:
  1. $ git push origin --delete <branch-name>

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

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

  1. $ git reset --soft HEAD^
Git How To. Глава 16. Отмена коммитов
Git How To. Глава 17. Удаление коммиттов из ветки
Официальная документация Git. Основы Git - Отмена изменений

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

  1. $ git add new_file.txt
  2. $ git commit --amend

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

  1. $ git commit --amend
  2. $ git commit --amend -m "Новый комментарий"

Как объединить несколько коммитов?

  1. $ git rebase -i HEAD~3
Вместо HEAD~3 можно использовать hash коммита. Нужно передать hash того коммита, до которого нужно всё объединить (сплющить).
Откроется редактор со списком коммитов, вверху будет самый старый коммит.
  1. pick 1111111 Commit 1 comment
  2. pick 2222222 Commit 2 comment
  3. pick 3333333 Commit 3 comment
Нужно заменть pick на squash, чтобы получилось так:
  1. pick 1111111 Commit 1 comment
  2. squash 2222222 Commit 2 comment
  3. squash 3333333 Commit 3 comment
Далее нужно сохранить файл и выйти. Будет снова будет открыт текстовой редактор со всеми комментариями к коммитам. Нужно отредактировать, сохранить и выйти. После этих действий коммиты будут объединены.

Как отменить изменения в определенном файле и вернуть его в состояние, в котором он находился после последнего коммита?

  1. $ git checkout -- file.txt

Как отменить все незафиксированные (незакомиченные) изменения?

  1. $ git checkout

Как придержать некоторые файлы для следующего коммита?

Допустим, вы хотите закоммитить изменения в некоторых файлах, а изменения в других файлах зафиксировать в следующем коммите. Тогда можно временно удалить их из репозитория (unstage files), а потом снова добавить.
  1. $ git reset HEAD file.txt
Эта команда удалит файл из репозитория, в старых коммитах он останется. Head указывает на последний коммит в текущей ветке.

Если не удаётся сделать push на удаленный репозиторий из-за того, что текущая версия репозитория меньше, чем на удаленном репозитории

В этом случае можно сделать принудительный push.
  1. $ git push -f origin master

Слияние веток

Как взять из другой ветки только некоторые файлы?

  1. $ git checkout branchname -- path/to/file.file

Удалённые репозитории

Вывод на экран информации об удалённом репозитории

  1. $ git remote show origin
На экран будет выведено, что-то вроде этого:
  1. * remote origin
  2. Fetch URL: git@gitsrv:/opt/git/test-project.git
  3. Push URL: git@gitsrv:/opt/git/test-project.git
  4. HEAD branch: master
  5. Remote branch:
  6. master new (next fetch will store in remotes/origin)
  7. Local ref configured for 'git push':
  8. master pushes to master (local out of date)

Добавление удалённого репозитория

  1. $ git remote add origin git@gitsrv:/opt/git/test-project.git

Удаление удалённого репозитория

  1. $ git remote remove origin

Дополнительная информация

Дополнительная информация

Хорошие практики

Как писать хорошие сообщения к коммитам

 git