Есть ли лучший способ узнать, существует ли локальная ветвь git?

Я использую следующую команду, чтобы узнать, существует ли локальная ветвь git с branch-name в моем хранилище. Это верно? Есть ли лучший способ?

Обратите внимание, что я делаю это внутри скрипта. По этой причине я бы хотел использовать сантехнические команды, если это возможно.

git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists. 

Ответ 1

Насколько я знаю, это лучший способ сделать это в script. Я не уверен, что добавить к этому еще много, но может быть и один ответ, который просто говорит: "Эта команда делает все, что вам нужно":)

Единственное, на что вы, возможно, захотите быть осторожным, это то, что имена ветвей могут иметь удивительные символы в них, поэтому вы можете процитировать <branch-name>.

Ответ 2

Когда я ищу 'git проверьте, существует ли ветвь в поисковой системе, эта страница является первой, которую я вижу.

Я получаю то, что хочу, но я хотел бы предоставить обновленный ответ, поскольку исходный пост был с 2011 года.

git rev-parse --verify <branch_name>

Это по существу то же самое, что и принятый ответ, но вам не нужен тип "refs/heads/"

Ответ 3

Почти там.

Просто оставьте --verify и --quiet, и вы получите либо хэш, если ветка существует, либо ничего, если это не так.

Назначьте его переменной и проверьте пустую строку.

exists=`git show-ref refs/heads/<branch-name>`
if [ -n "$exists" ]; then
    echo 'branch exists!'
fi

Ответ 4

Я думаю, вы можете использовать git show-branch здесь.

$ git show-branch --list
  [master] test
* [testbranch] test
$ git show-branch testbranch
[testbranch] test
$ echo $?
0
$ git show-branch nonexistantbranch
fatal: bad sha1 reference nonexistantbranch
$ echo $?
128

Итак, $? == 0 указывает, что ветвь существует, и вам не нужно вникать в сантехнику refs/heads/вообще. Пока вы не проходите -r в show-branch, он будет работать только в локальных ветвях.

Ответ 5

Я рекомендую git show-ref --quiet refs/heads/$name.

  • --quiet означает, что нет выхода, что хорошо, потому что тогда вы можете четко проверить статус выхода.

  • refs/heads/$name ограничивает локальные ветки и сопоставляет полные имена (иначе dev будет соответствовать develop)

Использование в script:

if git show-ref --quiet refs/heads/develop; then
    echo develop branch exists
fi

Ответ 6

Для использования в скрипте:

git show-ref -q --heads <branch-name>

Это завершит 0 если и только если <branch-name> существует как локальная ветвь.

Пример:

if git show-ref -q --heads <branch-name>; then
   echo 'Branch exists'
fi

Ответ 7

В пакетном пакете Windows script он немного отличается,

git rev-parse --verify <branch>

if %ERRORLEVEL% == 0  (
    echo "Yes"
) else (
    echo "No"
)

Ответ 8

Позвоните ему git is_localbranch (вам нужно добавить псевдоним в .gitconfig).

Использование:

$ git is_localbranch BRANCH

Источник:

git branch | grep -w $1 > /dev/null
if [ $? = 0 ]
then
  echo "branch exists"
fi

Ответ 9

Результат обзора моего "Рекомендуемого редактирования" в "Обновить" по первоначальному вопросу был "Он должен был быть написан как комментарий или ответ", поэтому я размещаю его здесь:

Предлагаемый другой способ не только проверяет ветки, но и любую ссылку с таким именем @jhuynh.

git rev-parse --verify <reference-name>
# $? == 0 means reference with <reference-name> exists.

Проблема с "Обновить" на начальном quiestion объясняется:

Давайте предположим и проверим, что "master.000" - это только тег, такая локальная ветвь не существует, grep возвращает одну запись, которая является тегом. Тем не менее rev-parse будет возвращать 0, если ссылка существует, даже если такая локальная ветвь не существует. Это ложное совпадение, как указано в @paul-s

$ git show-ref |grep master.000

f0686b8c16401be87e72f9466083d29295b86f4a refs/tags/master.000
$ git rev-parse --verify master.000
f0686b8c16401be87e72f9466083d29295b86f4a
$ echo $?
0

Ответ 10

Я хотел использовать его в браузере, поэтому я сделал небольшое приложение, которое позволяет проверить правильность названия вашего ветки. Он поддерживает git, поэтому вы знаете, что получаете.

https://branch-checker.herokuapp.com/validate?branch=not//valid

Ответ 11

Ни git show-ref ни git rev-parse работают в моем случае.

$ git --version
git version 2.21.0

$ git show-branch --list
* [master] mybranch commit

$ BRANCH_NAME=mybranch
$ git rev-parse --verify $BRANCH_NAME
fatal: Needed a single revision

$ git show-ref refs/heads/$BRANCH_NAME
<no otput>
$ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists"
mybranch not exists

Я закончил с этим

$ BRANCH_NAME=mybranch
$ SHOW_ALL='git show-branch --all | grep -w $BRANCH_NAME'
$ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists"
mybranch exists

Вы можете сделать также с файлом сценария

#!/bin/sh
BRANCH_NAME=mybranch
if grep -Fqe $BRANCH_NAME << EOF
'git show-branch --all'
EOF
then
   echo "$BRANCH_NAME exists"
else
   echo "$BRANCH_NAME not exists"
fi

Ответ 12

да есть один. мерзавец преподобного разобрать []... https://git-scm.com/docs/git-rev-parse Где и можно найти множество аргументов и функции.

        git rev-parse --verify <branch-name>

Ответ 13

Если вы можете включить grep.

git branch | grep -q <branch>

Ответ 14

Для использования в script, я рекомендую следующую команду:

git ls-remote --heads <repo_url> "<branch_name>" | wc -l

Обратите внимание, что <repo_url> может быть просто "." указать локальное репо, если вы находитесь внутри его структуры каталогов, путь к локальному репо или адрес удаленного репо.

Команда возвращает 0, если <branch_name> не существует 1, если присутствует.

Ответ 15

$git branch --list $branch_name | grep $branch_name затем проверьте, что возвращаемое значение равно 0 или 1.