Исходя из опыта SVN, одна из самых сложных вещей, к которой нужно привыкнуть при работе с системами DVCS, - это то, как все они, похоже, рассматривают любое незавершенное изменение, как бомбу замедленного действия.
В Mercurial, если вы пытаетесь получить изменения и у вас есть какие-либо незафиксированные изменения в вашей рабочей копии, вам нужно перепрыгнуть через обручи, чтобы она просто объединяла входящие изменения. Попробуйте переключать ветви? Это заставит вас отложить все на полку, и тогда вам придется немедленно отложить все это на другом конце. (У SVN нет проблем ни с одним из этих сценариев.)
Git примерно так же. Я работаю бок о бок с другим разработчиком над проектом, и я просто попытался выбрать один из его коммитов в мою форк. Он отказался позволить мне, потому что у меня были незафиксированные изменения в моей рабочей копии, в совершенно других файлах, чем те, которые были изменены в его коммите. Там даже нет варианта слияния; по-видимому, я должен сначала спрятать свои изменения!
Если бы человек относился к чему-то совершенно безвредному с такой чрезвычайной осторожностью, я бы назвал это «фобией», иррациональным страхом, который следует рассматривать как психическое расстройство. Но Git и Mercurial были разработаны двумя разными командами разумных, рациональных разработчиков, поэтому мне интересно, знают ли они что-то, о чем я не знаю.
Есть ли техническая причина, которая оправдывает такое отношение к незавершенным изменениям? И если да, то почему рассматриваемая проблема существует только на DVCS?
источник
Ответы:
Резюме
Это не фобия, это (иногда резкое) принуждение к тому, чтобы следовать хорошим манерам "совершать часто" (пользователи SVN иногда боятся этого стиля)
И, наконец,
hg qnew|qpop|qpush
небольшая справедливая цена за аккуратность и порядокисточник
Когда вы сливаетесь или выбираете вишню
git
, вы немедленно создаете коммит. Операция не завершена, пока эта фиксация не будет завершена и не станет частью истории.Теперь, что произойдет, если
git
вы позволите замаскировать незафиксированные изменения в вашем рабочем каталоге? У вас будет (более или менее) трудное время для разграничения между изменениями / конфликтами слияния, о которых вам нужно позаботиться для слияния / выбора вишни, и изменениями, которые вы представили сами. Кроме того, было бы практически невозможно проверить, что вы на самом деле делаете.Таким образом, форсирование чистого рабочего каталога для ситуаций слияния помогает сделать вещи простыми и управляемыми. В конце концов, все, что вам нужно сделать, это спрятать ваши незафиксированные изменения до слияния, а затем распаковать их. Обратите внимание, что в рабочем процессе
у вас есть две (!) операции слияния. Тот, который объединяет ваш последний коммит с входящими изменениями, и тот, который объединяет ваши незафиксированные изменения с результирующим коммитом слияния. Таким образом, вам нужно всего лишь объединить две вещи в одну, чтобы избежать путаницы, которая может возникнуть в результате попытки объединить три вещи в одну за одну операцию, пытаясь игнорировать эти три вещи.
git stash
/git stash pop
Позволяет легко и четко , что вы игнорируя ваши неподтвержденные изменения для слияния.источник