Блокировка ветки, чтобы она не могла быть поставлена /зафиксирована? (Только слитый/etc)
У меня есть ветвящая система master
/develop
, которую я полюбил, но в ней есть основное правило. Никакие коммиты не выполняются в develop
или master
, только сливаются. Это здорово, но в последнее время я случайно сделал некоторые изменения/фиксации на моей ветке разработки, и это раздражает меня.
Я рассмотрел вопрос о переносе владения этими коммитами из develop
в другую уже существующую ветку (мы будем называть ее work
), с которой я должен был работать в первую очередь, но я решил просто пусть это идет. Вместо этого я хотел бы исправить эту проблему, чтобы начать с... Как сделать блокировку ветки, чтобы транзакция просто не работала над ней для традиционных нормальных изменений?
Например, если вы вносили изменения в "заблокированную" ветвь, вы не могли git add
и не могли git commit -a
. Я предполагаю, что технически я прошу заблокировать постановку, но вы понимаете. Любые мысли по этому поводу? Или я просто лучше научился git достаточно хорошо, чтобы я знал, как исправить проблемы с родителями-родителями?
Ответы
Ответ 1
Скопируйте это:
#!/bin/bash
if [[ `git symbolic-ref HEAD` == "refs/heads/master" ]]
then
echo "You cannot commit in master!"
exit 1
fi
в файл с именем pre-commit
в .git/hooks/
Это не позволит вам отправиться в ветвь master
. Вы можете легко настроить его, чтобы добавить дополнительные ветки или персонализировать сообщение об ошибке и т.д.
Кстати, полезный трюк, чтобы знать, когда вы вносили изменения в master
, но вы хотите зафиксировать их в somebranch
, это сделать:
git stash
git checkout somebranch
git stash apply
а затем вы находитесь в somebranch
с вашими изменениями, готовыми к фиксации!