Skip to content

Commit

Permalink
Добавляет ответ на вопрос о разнице между git rebase и git merge (d…
Browse files Browse the repository at this point in the history
…oka-guide#5471)

Co-authored-by: Tatiana Fokina <[email protected]>
  • Loading branch information
Otkazano and TatianaFokina authored Nov 19, 2024
1 parent 2f68d06 commit eba88dd
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 0 deletions.
23 changes: 23 additions & 0 deletions interviews/git-rebase-merge/answers/otkazano/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
Обе команды нужны для одной цели, но имеют существенные отличия в том, как работают.

`git merge` объединяет изменения из одной ветки в другую, создавая новый коммит слияния `merge commit`, который сохраняет полную историю проекта. Это позволяет проследить все коммиты и увидеть, когда и как ветки были объединены, хотя такая история может быть сложнее для чтения. Однако, если целевая ветка не имеет новых коммитов, Git использует `fast-forward merge`, просто перемещая указатель вперёд без создания дополнительного коммита, что сохраняет линейную и более простую для чтения историю.

Обратите внимание, что, при использовании `merge`, мы должны находиться в ветке, **в которую** делаем перемещение.

```bash
git checkout main
git merge feature
```

`git rebase` перемещает или переписывает базу текущей ветки на указанную базу другой ветки, изменяя хэши коммитов и делая историю линейной, что упрощает чтение последовательности внедрения фич. При этом не создаётся новый коммит слияния `merge commit`, но это может затруднить отслеживание точной хронологии. Важно, что `git rebase` позволяет переносить только часть коммитов и не требует находиться в целевой ветке — можно использовать флаг `--onto`, чтобы выполнить ребейз на другую ветку или коммит, гибко управляя изменениями. Будьте осторожны, так как команда может [иметь негативный эффект](https://git-scm.com/book/ru/v2/%D0%92%D0%B5%D1%82%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-Git-%D0%9F%D0%B5%D1%80%D0%B5%D0%B1%D0%B0%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5#:~:text=%D0%9E%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D1%8F).

Обратите внимание, что, при использовании `rebase`, мы должны находиться в ветке, **из которой** делаем перемещение.

```bash
git checkout feature
git rebase main
```

Используйте `merge`, когда хотите сохранить всю историю разработки, включая все ветвления и слияния. Это полезно для командной работы, где важно видеть весь контекст изменений.

Используйте `rebase`, когда хотите поддерживать чистую и линейную историю. Это особенно полезно для интеграции изменений в основную ветку перед созданием `pull request`, чтобы история коммитов была более понятной.
6 changes: 6 additions & 0 deletions interviews/git-rebase-merge/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
related:
- recipes/git-rebase-onto
---

Какая разница между `git merge` и `git rebase`?
6 changes: 6 additions & 0 deletions people/otkazano/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
name: 'Владимир Стругов'
url: https://github.com/Otkazano
badges:
- first-contribution-small
---

0 comments on commit eba88dd

Please sign in to comment.