#git #android_studio #контроль_версий
Кто-то может расстолковать какая разница: Merge Rebase Branch Default И Using Stash Using Shelve Что в каких случаях используется?
Ответы
Ответ 1
Для начала git stash или git shelve. Когда Вы подтягиваете новые изменения, в Вашем рабочем каталоге могут быть измененные (незакоммиченные) файлы. Естественно, что эти файлы при слиянии изменений могут потерятся. Поэтому гит предлагает их "спрятать в карман". Это называется git stash. После того, как новый код будет получен с удаленного репозитория, изменения с stash можно накатить назад (естественн, при этом возможно нужно будет решить конфликты). В "кармане" можно хранить сколько угодно изменений (логично - ограничены своим диском) и карман не передается на сервер. Детальнее о git stash на русском. git shelve - это древний проект (2008 года), который не поддерживается на данный момент. Как и git shash, умеет прятатть изменения, только в отдельные ветки. Зачем оно в студии - не ведомо. Теперь о первой колонке. При накатывании чужих коммитов может произойти две ситуации - в ветке есть Ваши коммиты и чужие и когда есть только с одной стороны. Понятно, что когда есть только коммиты одной стороны, то принять изменения очень просто - их нужно просто "скопировать себе" и поправить указатели на ветки. В том случае, если есть и свои коммиты и чужие, нужно их "сложить вместе". Для этого есть две технологии - merge и rebase. При merge происходит слияние файлов. Там, где файлы одинаковые, проблем нет, там где файлы разные, гит пытается сложить вместе. Иногда у него это не выходит и он просит пользователя "разрешить конфликт" - так как только программист знает, что он хочет. Но есть второй способ - это rebase. Некоторые люди любят этот способ, а некоторые под страхом разрушить репозиторий боятся его использовать. Работает он очень просто. Сравниваются две ветки и ищется общий предок-коммит. Дальше, с локальной ветки откатываются все коммиты до общего коммита. Естественно, что теперь добавить коммиты с удаленного репозитория просто. После этого локальные коммиты "накатываются поверху". Если в процессе накатки возникают конфликты, их нужно решать. А вот что такое Branch default - я не знаю, возможно, студия запоминает последний выбор и применяет его.Ответ 2
Я бы добавил что Shelve это чисто фича IDEA https://www.jetbrains.com/idea/help/shelving-and-unshelving-changes.html, кое в чём погибче, но git тоже на месте не стоит. Тут похожий вопрос был https://stackoverflow.com/questions/28008139/git-shelve-vs-stash
Комментариев нет:
Отправить комментарий