Подтвердить что ты не робот

Блокировка ветки, чтобы она не могла быть поставлена ​​/зафиксирована? (Только слитый/etc)

У меня есть ветвящая система master/develop, которую я полюбил, но в ней есть основное правило. Никакие коммиты не выполняются в develop или master, только сливаются. Это здорово, но в последнее время я случайно сделал некоторые изменения/фиксации на моей ветке разработки, и это раздражает меня.

Я рассмотрел вопрос о переносе владения этими коммитами из develop в другую уже существующую ветку (мы будем называть ее work), с которой я должен был работать в первую очередь, но я решил просто пусть это идет. Вместо этого я хотел бы исправить эту проблему, чтобы начать с... Как сделать блокировку ветки, чтобы транзакция просто не работала над ней для традиционных нормальных изменений?

Например, если вы вносили изменения в "заблокированную" ветвь, вы не могли git add и не могли git commit -a. Я предполагаю, что технически я прошу заблокировать постановку, но вы понимаете. Любые мысли по этому поводу? Или я просто лучше научился git достаточно хорошо, чтобы я знал, как исправить проблемы с родителями-родителями?

4b9b3361

Ответ 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 с вашими изменениями, готовыми к фиксации!