Как предотвратить git нажимать <branch> от нажатия, если я не проверен на этой ветке?

Проблема, с которой я столкнулся, заключается в том, что мои пальцы автоматически набирают git push origin master. Если я вместо этого работаю над new-branch и имел смысл набирать git push origin new-branch, и на master есть неустановленные изменения, они будут случайно выбрасываться. Есть ли способ предотвратить это, чтобы я мог только нажать на текущую ветку и из нее?

Ответ 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 или выше.