Есть ли лучший способ узнать, существует ли локальная ветвь 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.