Git: Merge vs Rebase vs Pull vs Fetch
1. git fetch vs git pull
git fetch: Загружает все новые данные из удалённого р епозитория на локальную машину, но не изменяет рабочую ветку. Обновляются только ветки удалённого отслеживания (например,origin/main).git pull: По сути выполняетgit fetch, а затем сразуgit mergeполученной ветки в текущую. Обновляет локальный код напрямую.- Правило: Используйте
fetch, если хотите сначала посмотреть, что сделали другие, прежде чем принимать решение о слиянии. Используйтеpull, когда уверены, что хотите немедленно интегрировать изменения.
2. git merge vs git rebase
Оба используются для интеграции изменений из одной ветки в другую, но делают это по-разному.
git merge
- Объединяет истории двух веток в один новый коммит (merge commit).
- Плюсы: Сохраняет оригинальную историю проекта в том виде, в каком она создавала сь; неразрушающий.
- Минусы: Может привести к запутанной истории проекта с множеством merge-коммитов при частом использовании.
git rebase
- Берёт изменения из одной ветки и применяет их поверх другой. По сути переписывает историю.
- Плюсы: Обеспечивает чистую, линейную историю проекта.
- Минусы: Переписывание истории может быть опасным для публичных/общих веток! Никогда не делайте rebase ветки, с которой работают другие.
3. Стратегии слияния
- Fast-forward: Если в целевой ветке нет новых коммитов, Git просто перемещает указатель вперёд.
- Recursive (3-way merge): Используется, когда ветки разошлись. Git находит общего предка и создаёт новый merge-коммит.
4. Полез ные команды Git
git stash: Временно «прячет» изменения, чтобы можно было переключиться на другую ветку без коммита.git cherry-pick <commit>: Применяет конкретный коммит из одной ветки к другой.git revert <commit>: Создаёт новый коммит, отменяющий изменения предыдущего коммита (безопаснее, чем reset).git reset --hard <commit>: Сбрасывает текущую ветку и рабочую директорию до указанного коммита (опасно, возможна потеря данных!).