Запрещение ветвления из ветки в git - PullRequest
0 голосов
/ 28 августа 2018

В моем рабочем процессе я почти никогда не хочу переходить из ветви, отличной от master. Пару раз я делал это случайно при запуске новой функции. Когда я это делаю, это портит мою историю при слиянии.

Какой хороший способ защитить себя от создания новой ветки, если я уже на ветке? Я знаю про второй параметр для git branch

git checkout -b newbranch master

но я не уверен, что смогу переобучиться, чтобы всегда обеспечивать это. В идеале, я должен иметь такое поведение по умолчанию, когда я набираю git checkout -b newbranch, или иметь предупреждение при попытке перейти из ветви.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Вы можете создать псевдоним bash для git, который проверяет это условие и переписывает вашу команду проверки в соответствии с вашим соглашением. В этом примере ниже я сохраняю переданную в родительской ветви, но по умолчанию master, если она не задана.

Bash Alias ​​

#!/bin/bash
cmd=$1
opt=$2
branch=$3
parent=$4
if [[ $cmd = "checkout" ]] && [[ $opt = "-b" ]]; then
  if [ -z "$parent" ]; then
    parent="master"
  fi
  /usr/bin/git checkout -b $branch $parent
else
  /usr/bin/git "$@"
fi

Последовательность команд теста

chmod +x /path/to/git-wrapper.sh
alias git=/path/to/git-wrapper.sh
mkdir test
cd ./test
git init
echo "First line" >readme.md
git add readme.md
git commit -m "Initial commit"
git checkout -b test1
echo "Second line" >> readme.md
git commit -am "Second line"
git checkout -b test2
echo "Third line" >> readme.md
git commit -am "Third line"
git checkout master
git branch -a
git log
git merge test1
git merge test2

Пример вывода

Initialized empty Git repository in ...
[master (root-commit) 11bd292] Initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 readme.md
Switched to a new branch 'test1'
[test1 4ace272] Second line
 1 file changed, 1 insertion(+)
Switched to a new branch 'test2'
[test2 54b7fff] Third line
 1 file changed, 1 insertion(+)
Switched to branch 'master'
* master
  test1
  test2
Updating 11bd292..4ace272
Fast-forward
 readme.md | 1 +
 1 file changed, 1 insertion(+)
Auto-merging readme.md
CONFLICT (content): Merge conflict in readme.md
Automatic merge failed; fix conflicts and then commit the result.

Ошибка слияния - это наш ожидаемый результат (если бы псевдоним не был активен, мы бы разветвлялись с test1 до test2, и слияние было бы быстро перенесено. Проверьте это!

0 голосов
/ 28 августа 2018

У меня будет пользовательский пакет / псевдоним, который переключится на мастер, может быть вытащил мастер и т. Д., А затем создаст новую ветку.

Другой вариант - сначала создать ветки в вашем удаленном репо. Я не знаю, какое решение вы используете для удаленного репо, но таким образом процесс будет более осознанным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...