Git

Основные команды Git

Команды:

Создание новой ветки и переключение на нее:

  • git branch newBranch
  • git checkout newBranch

или

  • git checkout -b newBranch

 

Залить новую локальную ветку на remote (удаленный репозиторий):

  • git checkout bugFix (перейти в нужную ветку)
  • git push origin -u bugFix

 

Удаление веток:

Локально:

  • git checkout master
  • git branch -d bugFix

Remote (удаленная ветка):

  • git push --delete origin bugFix

 

  • git checkout branch -r
  • git remote show origin

Merge:

(ветка bugFix будет влита в master) 

  • git checkout master
  • git merge bugFix

 

Rebase (аналог merge):

Обычный rebase:

(в мастер будет добавлена ветка bugFix после самого последнего коммита на момент rebase)

  • git checkout bugFix
  • git rebase master

Rebase наоборот:

(в мастер будет добавлена ветка bugFix между коммитами когда создавалась bugFix и перед последним коммитом на момент rebase)

  • git checkout master
  • git rebase bugFix

 

Cherry-pick (выбор только необходимых коммитов и вливание их в ветку):

(коммит будет влит в ветку production)

  • git checkout production
  • git cherry хэш коммита

 

Стандартный Git Flow:

  • git clone https://github.com/user/reposit (клонирование проекта)
  • или если проект уже клонирован, тогда переходим в основную ветку (например, develop): git checkout develop и обновляем ветку develop: git pull
  • git checkout -b newBranch (создание своей ветки (newBranch) для работы и переход в нее)
  • сделали свою работу
  • git commit -m "new commit" (создали коммит с комментарием new commit)
  • переходим в основную ветку (например, develop): git checkout develop и обновляем локальную ветку develop: git pull
  • git checkout newBranch 
  • git merge develop (подтягиваем изменения из обновленной ветки develop)
  • git push -u origin newBranch (залить новую локальную ветку в remote "удаленный репозиторий" с отслеживанием изменений)

далее Pull Request:

  • Заходим на GitHub (GitLab или BitBucket) в нужный репозиторий в свою ветку newBranch
  • Жмем [New Pull Request]
  • Выбираем куда вливать(слева)[], откуда вливать newBranch (справа)[]
  • Пишем понятный комментарий о проделанной работе для того человека, кто будет делать merge.
  • Жмем [Create Pull Request]

 

 

Если забыли сменить ветку и работали в develop вместо feature:

  • Находясь в локальной ветке develop делаем Stage
  • Переходим в feature ветку видим незакоммиченные файлы
  • git commit -m"добавляем изменения в фича ветку"
  • Делаем git push (передаем изменения фича ветки на удаленный репозиторий, чтобы не потерять изменения)
  • Переходим в ветку develop удаляем незакоммиченные изменения git reset --hard
  • Актуализируем develop git pull

 

Есть два основных способа отмены изменений в Git: первый - это git reset (для локальных), а второй - git revert (для remote):

Reset отлично работает на локальных ветках, в локальных репозиториях. Но этот метод переписывания истории не сработает на удалённых ветках, которые используют другие пользователи.

git reset перенесёт ветку назад, как будто некоторых коммитов вовсе и не было.

  • git reset HEAD~1

Чтобы отменить изменения и поделиться отменёнными изменениями с остальными, надо использовать git revert

git revert отменяет изменения, перенося ссылку на ветку назад, на более старый коммит. Это своего рода "переписывание истории"; 

  • git revert HEAD

 

 

Переставить указатель HEAD на коммит по хэшу коммита:

  • git checkout хэшкоммита

на рисунке: git checkout C4

 

Относительные ссылки

  • Перемещение на один коммит назад ^
  • git checkout bugFix^
  • Перемещение на <num> коммитов назад ~<num>
  • git checkout bugFix~2

Перемещение ветки (branch forcing)

  • git branch -f master HEAD~3 Переместит (принудительно) ветку master на три родителя назад от HEAD:

https://www.youtube.com/watch?v=m3voEkMZLvA&list=PLg5SS_4L6LYstwxTEOU05E0URTHnbtA0l&index=13

© 2021 QAstart.by