Чтобы добавить к моему предыдущему ответу и учесть тот факт, что принудительный git push
действительно может испортить локальные репозитории других участников, git 1.8.5 (в предстоящем 4 квартале 2013 года) увидит новый опция:
git push --force-with-lease
См. Происхождение этой опции в этой теме :
если что-то произойдет в 'origin
' с веткой, которую вы форсируете или удаляете с тех пор, как вы выбрали ее для проверки, вы можете потерять работу других людей .
Кто-то, кто не знает о решении перемотать и перестроить ветку, может попытаться протолкнуть ветку между временем, которое вы выбрали, чтобы перебазировать его, и временем, которое вы подтолкнули, чтобы заменить его результатом перебазировки.
Мы можем make these pushes safer
, опционально разрешив пользователю сказать "git push
" это:
Я форсирую / удаляю, исходя из предположения, что значение 'branch' все еще находится в этом объекте.
Если это предположение больше не выполняется, то есть если что-то случилось с веткой с тех пор, как я начал готовиться к этому пушу, не продолжайте и не проваливайте этот пуш.
Вы можете увидеть полную документацию --force-with-lease
в commit 28f5d17
--force-with-lease
будет защищать всех удаленных ссылок, которые будут обновлены, требуя, чтобы их текущее значение совпадало с некоторым разумным значением по умолчанию, если не указано иное;
На данный момент «некоторое разумное значение по умолчанию» предварительно определено как «значение ветви удаленного отслеживания, которую мы имеем для ссылки на обновляемый удаленный», и это ошибка, если у нас нет такого удаленного отслеживание ответвления.
Это объясняет "аренду" часть этого варианта:
"force-with-lease
": Вы предполагаете, что взяли в аренду аренду рефери, когда выбирали, чтобы решить, какой должна быть перебазированная история, и вы можете отменить ее, только если аренда не была нарушена.
Это уже проверяется и упоминается в " Что готовит в git.git (август 2013, # 07; ср., 28) ":
Кстати, нажатие, которое переопределяет обычную «необходимость быстрой перемотки вперед», было сделано с помощью опции «force-with-lease
», которая готовилась в next
, например:
$ git fetch ko next
$ anchor=$(git rev-parse --verify FETCH_HEAD)
$ for remote in ko repo gph github2
do
git push --force-with-lease=refs/heads/next:$anchor $remote next
done
Примечание: "git push --force-with-lease
" научили сообщать, если толчок
необходимо форсировать (или быстро пересылать).
Итак, эта команда более подробно представлена в выходных данных git 2.8 (март 2016 г.)
push: исправить отчет о состоянии ссылки для --force-with-lease
Опция --force--with-lease
push приводит к менее подробной информации о состоянии, чем --force
.
В частности, выходные данные указывают, что ссылка была переадресована,
даже когда оно было принудительно обновлено.
Остерегайтесь того, чтобы этот параметр игнорировался / игнорировался, как объяснено в Git 2.13 (второй квартал 2017 года) .