Проблема, с которой я столкнулся, заключается в том, что мои пальцы автоматически набирают git push origin master
. Если я вместо этого работаю над new-branch
и имел смысл набирать git push origin new-branch
, и на master
есть неустановленные изменения, они будут случайно выбрасываться. Есть ли способ предотвратить это, чтобы я мог только нажать на текущую ветку и из нее?
Как предотвратить git нажимать <branch> от нажатия, если я не проверен на этой ветке?
Ответ 1
Вы можете просто создать псевдоним с именем, скажем, gitpushcurrent
, указав на git push origin $(git branch | grep "*" | sed "s/* //")
.
Затем перетащите пальцы, чтобы автоматически ввести gitpushcurrent
вместо git push origin master
. Таким образом, вам не нужно думать, что такое текущая ветвь.
Ответ 2
Вы можете указать, что git push
делает, если refcpec не задан с помощью параметра push.default
в git-config
. Для вашей ситуации есть три режима:
Режимы
simple
,current
иupstream
предназначены для тех, кто хочет вытолкнуть одну ветвь после окончания работы, даже если другие ветки еще не готовы к выталкиванию.
Обратите внимание, что этот параметр вступает в силу, если не указан refspec, т.е. работает git push
без дополнительных аргументов. git push origin master
по-прежнему будет нажимать master
на origin
.
Как правило, вы всегда должны создавать отдельные рабочие ветки и никогда не передавать промежуточные результаты своей основной ветке. git flow
упрощает этот рабочий процесс.
В документации :
push.default
Определяет действие
git push
, которое должно выполняться, если в командной строке не указан refspec, в удаленном режиме не задан refspec, и никакая опция refspec не подразумевается ни одной из опций, заданных в командной строке. Возможные значения:
nothing
- ничего не нажимайте.
matching
- нажмите все ветки с одинаковым именем на обоих концах. Это для тех, кто готовит все ветки в публикуемую форму, а затем выталкивает их одной командой. Не подходит для того, чтобы входить в репозиторий, разделяемый несколькими пользователями, поскольку локально остановленные ветки будут пытаться непереходным нажатием вперед, если другие пользователи обновят ветку. + В настоящее время это значение по умолчанию, но Git 2.0 изменит значение по умолчанию наsimple
.
upstream
- переместите текущую ветвь в ее ветвь вверх по течению (tracking
- устаревший синоним для этого). При этомgit push
будет обновлять тот же самый удаленный ref, что и тот, который объединенgit pull
, делаяpush
иpull
симметричными. См. "Branch..merge" для настройки ветки восходящего потока.
simple
- какupstream
, но отказывается выдвигать, если имя ветки восходящего потока отличается от локального. Это самый безопасный вариант и подходит для начинающих. Он станет значением по умолчанию в Git 2.0.
current
- нажмите текущую ветвь на ветку с тем же именем.
Ответ 3
Вы хотите обновить git до версии 1.7.11 или новее и использовать "простое" push.default:
o simple - like upstream, but refuses to push if the upstream branch name is different from the local one. This is the safest option and is
well-suited for beginners. It will become the default in Git 2.0.
Это точно предотвратит вашу проблему. Обратите внимание, что он также станет опцией по умолчанию в git 2.0. Вы можете включить его с помощью:
git config push.default simple
Ответ 4
Я использую Git на несколько дней, но, кстати, вы можете:
-
Обратите внимание на то, что вы печатаете на клавиатуре. Git является мощным, и, если ваши пальцы хорошо обучены вводить что-либо автоматически, вы можете нанести большой урон, например, удалить свою рабочую ветвь или объединить ветки, когда вы этого не хотите. Всегда будьте осторожны.
-
Используйте aliases для своих команд. Они очень мощные и могут сэкономить ваше время, не позволяя вам сделать то, чего вы действительно не хотите.
-
Прочитайте интересные и полезные темы, такие как этот вопрос SO или этот на сервере ServerFault,
Ответ 5
git -g config push.default current
Ответ 6
Этот вопрос очень похож на "Подтверждение команды git push"
И здесь я предлагаю такое же решение.
Все, что вам нужно, это предварительный крюк для фиксации в защищенных ветвях, таких как "master".
Этот блог на "как предотвратить-нажать-на-мастер" должен помочь вам.
PS: git Требуется версия 1.8.2 или выше.