Когда я работаю над функциональной веткой, я стремлюсь очистить коммиты в ветке с помощью интерактивной перебазировки, прежде чем моя работа будет рассмотрена и интегрирована в основную ветку.
Во время разработки этой функции я хочу перенести свою промежуточную работу в удаленный репозиторий в качестве меры резервного копирования. Т.е., когда мой жесткий диск выходит из строя, я не хочу, чтобы вся моя функциональная ветка была потеряна.
Тем не менее, это приводит к тому, что git push --force
после перезагрузки мне часто приходится делать удаленный репозиторий - действие, которое обычно не одобряется. Или, как сказано на связанной странице github:
Поскольку изменение истории коммитов может усложнить задачу всем остальным, использующим репозиторий, считается плохой практикой перебазировать коммиты, когда вы уже перешли в репозиторий.
Существует ли (общепринятая) политика, которая разрешает этот конфликт?
Почему это не дубликат. Так ли важен мерзавец "Золотое правило перебазирования"?
Мой вопрос здесь требует политики для разрешения конфликта между желанием сделать резервную копию вашей работы в удаленном репозитории и перебазированием вашей работы , в то время как другой вопрос пытается отрицать, что существует конфликт, и спрашивает, почему некоторые люди думают, что конфликт существует вообще, и, таким образом, спрашивает, почему «важно», чтобы не подталкивать силы перезагрузки?
Ответы:
Ключевой вопрос, который нужно задать себе:
Если вы удалите ветку удаленного компонента после слияния с мастером, вы уже потеряете историю. Предполагая, что вы раздавили / перебазировали ветку до того, как сделали слияние / PR, вы потеряете эту историю. В этом случае все, что вы делаете принудительно, позволяет вам использовать github в качестве резервной копии.
Ситуация, в которой вы хотели бы сохранить историю, а не принудительное нажатие, - это если ваша удаленная ветвь сохраняется после слияния, а не только существует в течение временного периода времени.
Похоже, у вас есть несколько человек, которые толкают к этой ветви одновременно. Это означает, что вы заботитесь об истории на ветке.
Что вы могли бы сделать вместо этого для своей промежуточной работы, так это создать ветвь этой ветки. Вы можете нажать на это, а затем повторно объединить все свои коммиты в один коммит до слияния, поэтому, когда вы объединяете их в свою функциональную ветвь, у вас есть только 1 коммит (с перебазированной историей всей вашей ветки).
источник
featurebranch-local
), а затем сделать активную разработку для этой ветки с таким количеством коммитов, сколько хотите. Как только вы захотите объединить, раздавите эти коммиты, а затем объедините их в функцию. По сути, просто выполняем dev в реальной временной ветке, а затем добавляем / добавляем в вашу функцию.develop-feature
веткой. Конечно, конфиденциальность является чисто условной и не навязывается ничем, но может быть включена в политику, особенно если для этого введены определенные соглашения об именах филиалов. (Может быть, я сейчас слишком волнуюсь, а может и нет :) Комбинация с--force-with-lease
не может повредить, хотя на нее не следует полагаться, как указано в моем другом посте.Я перечисляю некоторые возможности, которые приходят мне в голову.
Всегда ребаз на новую ветку
Если у вас грязная ветка
some-feature
, перебазируйте ее на новую ветку. НапримерЗатем
some-feature-rebase
пересмотрели и интегрировали.Проблема: большой недостаток в том, что, строго говоря, вам нужна новая ветвь для каждой перебазировки. (Например, вы можете сделать несколько перебаз, если внесете изменения после проверки кода)
использование
git push --force-with-lease
Я только что узнал об
git push --force-with-lease
альтернативеgit push --force
, котораяПроблема : Это, кажется, улучшается непосредственно в ситуации, когда мы используем just
--force
, но все еще есть некоторые предостережения, особенно когда я делаюgit fetch
вместо agit pull
, который обновляет наши локальные ветки upstream, обманывая себя,--force-with-lease
думая, что на удаленном сервере не было внесено никаких необъявленных изменений. филиал.источник