Шпаргалка по Git
Быстрый доступ к основным командам git.
- git
- rebase
Получение изменений #
Предположим, что Джон и вы (или несколько человек) работаете над одной веткой.
- [СИТУАЦИЯ 1] У вас есть некоторые изменения, и Джон делает push. Теперь ваш локальный git на один коммит позади, т.е.
↓ 1
- Попробуйте
git pull
, чтобы синхронизировать вашу текущую ветку. Если успешно, вы закончили! - Если вы получите
Fatal: Not possible to fast-forward, aborting
, переходите к СИТУАЦИИ 2.
- Попробуйте
- [СИТУАЦИЯ 2] Предположим, у вас уже есть несколько коммитов, и Джон делает push. Теперь ваш локальный репозиторий выглядит как
↓ 1 ↑ 3
- Используйте
git pull --rebase
. Подумайте об этом как о том, чтобы отложить ваши изменения, получить все изменения, отправленные с удаленного репозитория, а затем вернуть ваши изменения поверх этого. Это может вызвать конфликты слияния, если Джон изменил файлы, которые вы также изменили. - Если вы снова столкнетесь с
Fatal: Not possible to fast-forward, aborting
, возможно, у вас есть незавершенные изменения, которые вы не закоммитили. Попробуйтеgit stash
, чтобы сохранить ваши изменения, затемgit pull --rebase
, чтобы получить коммит Джона, иgit stash pop
, чтобы вернуть ваши изменения.
- Используйте
Отмена коммитов #
Мы будем называть ошибочные коммиты теми коммитами, которые вы хотите отменить.
- [СИТУАЦИЯ 1] Вы еще не отправили свои ошибочные коммиты в удаленный репозиторий.
- Отменить последний коммит:
git reset HEAD~
- Отменить последние n коммитов:
git reset HEAD~n
, т.е.git reset HEAD~4
- Отменить последний коммит:
- [СИТУАЦИЯ 2] Вы отправили свои ошибочные коммиты, ваши ошибочные коммиты находятся поверх всех остальных коммитов, и вы хотите удалить свои ошибочные коммиты из истории.
git reset HEAD~
ИЛИgit reset HEAD~n
, а затемgit push --force
- Убедитесь, что вы находитесь на правильной ветке, и ваша локальная ветка и удаленная ветка синхронизированы.
Синхронизация вашей ветки #
Вы пишете ветку с новой функцией или исправлением, и теперь в основной ветке есть изменения, которых нет в вашей ветке. Продолжайте к следующему шагу, если текущий шаг не удался или слишком сложен.
- [Шаг 1] Попытайтесь сделать rebase изменений из основной ветки в вашу ветку с функцией.
git checkout feature # переключает вас на ветку feature
git fetch origin # обновляет вас с удаленного репозитория
git pull --rebase main # помещает ваши изменения поверх изменений основной ветки
- [Шаг 2] Просто выполните squash merge изменений в вашу ветку.
git checkout feature # переключает вас на ветку feature
git fetch origin # обновляет вас с удаленного репозитория
git merge origin/main