diff --git a/interviews/git-rebase-merge/answers/otkazano/index.md b/interviews/git-rebase-merge/answers/otkazano/index.md new file mode 100644 index 0000000000..3da58fb213 --- /dev/null +++ b/interviews/git-rebase-merge/answers/otkazano/index.md @@ -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`, чтобы история коммитов была более понятной. diff --git a/interviews/git-rebase-merge/index.md b/interviews/git-rebase-merge/index.md new file mode 100644 index 0000000000..f666b19b2c --- /dev/null +++ b/interviews/git-rebase-merge/index.md @@ -0,0 +1,6 @@ +--- +related: + - recipes/git-rebase-onto +--- + +Какая разница между `git merge` и `git rebase`? diff --git a/people/otkazano/index.md b/people/otkazano/index.md new file mode 100644 index 0000000000..bbb6022dcb --- /dev/null +++ b/people/otkazano/index.md @@ -0,0 +1,6 @@ +--- +name: 'Владимир Стругов' +url: https://github.com/Otkazano +badges: + - first-contribution-small +---