etc./StackOverFlow

Git에서 현재 브랜치 이름을 얻는 방법은 무엇입니까?

청렴결백한 만능 재주꾼 2021. 10. 9. 02:26
반응형

질문자 :mike628


저는 Subversion을 배경으로 하고 있고 분기가 있을 때 "이 작업 파일이 이 분기를 가리킵니다"라는 작업을 하고 있다는 사실을 알고 있었습니다.

그러나 Git을 사용하면 NetBeans 또는 Notepad++에서 파일을 편집할 때 마스터 또는 다른 분기에 연결되어 있는지 확실하지 않습니다.

git 에는 문제가 없으며 내가 하는 일을 알려줍니다.



다른 브랜치를 나열하지 않고 현재 있는 브랜치를 표시하려면 다음을 수행할 수 있습니다.

 git rev-parse --abbrev-ref HEAD

참조:


Jistanidiot

git branch

리포지토리의 모든 로컬 지점을 표시해야 합니다. 별표 표시된 지점이 현재 지점입니다.

현재 있는 지점의 이름만 검색하려면 다음을 수행할 수 있습니다.

 git rev-parse --abbrev-ref HEAD

또는 Git 2.22 이상:

 git branch --show-current

roberttdev

전체 refspec을 표시하는 git symbolic-ref HEAD 도 있습니다.

Git v1.8 이상에서 브랜치 이름만 표시하려면(이를 지적해 준 Greg에게 감사합니다):

 git symbolic-ref --short HEAD

Git v1.7 이상에서는 다음을 수행할 수도 있습니다.

 git rev-parse --abbrev-ref HEAD

지점에 있는 경우 둘 다 같은 지점 이름을 지정해야 합니다. 분리된 머리에 있는 경우 답변이 다릅니다.

메모:

이전 클라이언트에서는 다음과 같이 작동하는 것 같습니다.

 git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"

다리엔 26. 2014년 3월


Wernight

내 자신의 참조를 위해(그러나 다른 사람들에게 유용할 수 있음) 이 스레드에서 언급된 대부분의(기본 명령줄) 기술에 대한 개요를 작성했으며 각각은 여러 사용 사례에 적용되었습니다.

  • 로컬 지점(마스터)
  • 로컬 분기와 동기화된 원격 추적 분기(마스터와 동일한 커밋의 원본/마스터)
  • 로컬 브랜치(origin/feature-foo)와 동기화되지 않은 원격 추적 브랜치
  • 태그(v1.2.3)
  • 하위 모듈(하위 모듈 디렉토리 내에서 실행)
  • 일반 분리 헤드(위 항목 없음)

결과:

  • git branch | sed -n '/\* /s///p'
    • 로컬 브랜치: master
    • 원격 추적 분기(동기화됨): (detached from origin/master)
    • 원격 추적 분기(동기화되지 않음): (detached from origin/feature-foo)
    • 태그: (detached from v1.2.3)
    • 하위 모듈: (HEAD detached at 285f294)
    • 일반 분리 헤드: (detached from 285f294)
  • git status | head -1
    • 로컬 브랜치: # On branch master
    • 원격 추적 분기(동기화됨): # HEAD detached at origin/master
    • 원격 추적 분기(동기화되지 않음): # HEAD detached at origin/feature-foo
    • 태그: # HEAD detached at v1.2.3
    • 하위 모듈: # HEAD detached at 285f294
    • 일반 분리 헤드: # HEAD detached at 285f294
  • git describe --all
    • 로컬 브랜치: heads/master
    • 원격 (동기화) 지점을 추적 : heads/master (참고 : remotes/origin/master )
    • 원격 추적 분기(동기화되지 않음): remotes/origin/feature-foo
    • 태그: v1.2.3
    • 하위 모듈: remotes/origin/HEAD
    • 일반 분리 헤드: v1.0.6-5-g2393761
  • cat .git/HEAD :
    • 로컬 브랜치: ref: refs/heads/master
    • 하위 모듈: cat: .git/HEAD: Not a directory
    • 다른 모든 사용 사례: 해당 커밋의 SHA
  • git rev-parse --abbrev-ref HEAD
    • 로컬 브랜치: master
    • 다른 모든 사용 사례: HEAD
  • git symbolic-ref --short HEAD
    • 로컬 브랜치: master
    • 다른 모든 사용 사례: fatal: ref HEAD is not a symbolic ref

(참고로 이것은 git 버전 1.8.3.1에서 수행되었습니다.)


Stefaan

git 버전 2.22부터 다음을 사용할 수 있습니다.

 git branch --show-current

매뉴얼 페이지에 따라:

현재 분기의 이름을 인쇄합니다. detached HEAD 상태에서는 아무 것도 인쇄되지 않습니다.


Max

또 하나의 대안:

 git name-rev --name-only HEAD

Filip Spiridonov

충분히 간단합니다. 하나의 라이너로 얻었습니다 (bash)

 git branch | sed -n '/\* /s///p'

(크레딧: Limited Atonement)

그리고 내가 거기 있는 동안 원격 추적 분기(있는 경우)를 얻을 수 있는 하나의 라이너

 git rev-parse --symbolic-full-name --abbrev-ref @{u}

Olivier Refalo

Linux의 경우 저장소 디렉토리에 명령줄(콘솔)을 입력하기만 하면 됩니다.

 $ git status

다음과 유사한 텍스트가 표시됩니다.

 ... On branch master ...

master 브랜치에 있음을 의미합니다. 그 순간에 파일을 편집 중이고 동일한 로컬 리포지토리(Git 버전 제어 관리 하에 있는 파일이 포함된 로컬 디렉토리)에 있는 경우 이 분기에서 파일을 편집하고 있는 것입니다.


Tadeck

git symbolic-ref -q --short HEAD

현재 분기 이름이 필요한 스크립트에서 이것을 사용합니다. 현재 브랜치 이름이 될 HEAD에 대한 현재 짧은 기호 참조를 표시합니다.


Kousha

git branch | grep -e "^*" | cut -d' ' -f 2

브랜치 이름만 표시


ungalcrys

git branch 현재 브랜치 이름만 표시합니다.

git 분기는 모든 분기를 표시하고 현재 분기를 별표로 강조 표시하지만 많은 분기로 작업할 때는 너무 번거로울 수 있습니다.

현재 있는 분기만 표시하려면 다음을 사용하십시오.

 git rev-parse --abbrev-ref HEAD

Lawrence Paje

좋은 ol' awk를 사용하여 Oliver Refalo 와 동일한 길이의 명령줄 솔루션을 찾았습니다.

 git branch | awk '/^\*/{print $2}'

awk 는 이를 "정규식과 일치하는 행 {} 의 작업 수행"으로 읽습니다. 기본적으로 공백으로 구분된 필드를 가정하므로 두 번째 필드를 인쇄합니다. 분기가 있는 줄에만 *가 있다고 가정할 수 있으면 ^를 삭제할 수 있습니다. 아, 배쉬 골프!


Silas Barta

git 상태에 대한 덜 시끄러운 버전이 트릭을 수행합니다.

 git status -bsuno

출력한다

 ## branch-name

dgolovin

#!/bin/bash function git.branch { br=`git branch | grep "*"` echo ${br/* /} } git.branch

Dziamid

현재 분기의 이름을 알려주는 git-aware shell 프롬프트를 사용하지 않는 이유는 무엇입니까? git status 도 도움이 됩니다.


__git_ps1 도우미 함수에 contrib/ git-prompt.sh 가 수행하는 방식(git 버전 2.3.0):

  1. 먼저 rebase 진행 중이 감지되면 특별한 경우가 있습니다. Git은 rebase 과정에서 unnamed branch(detached HEAD)를 사용하여 atomic하게 만들고 원래 브랜치는 다른 곳에 저장합니다.

  2. .git/HEAD 파일이 심볼릭 링크인 경우(Git의 고대 역사에서 매우 드문 경우임) git symbolic-ref HEAD 2>/dev/null

  3. 그렇지 않으면 .git/HEAD 파일을 읽습니다. 다음 단계는 내용에 따라 다릅니다.

    • 이 파일이 없으면 현재 분기가 없는 것입니다. 이것은 일반적으로 저장소가 베어 있는 경우에 발생합니다.

    • 'ref: ' 접두사로 시작하면 .git/HEAD 는 symref(기호 참조)이고 우리는 일반 분기에 있습니다. 전체 이름을 얻으려면 이 접두사를 제거하고 현재 분기의 짧은 이름을 얻으려면 refs/heads/

       b="${head#ref: }" # ... b=${b##refs/heads/}
    • 'ref: ' 시작하지 않으면 HEAD(익명 분기)가 분리되어 커밋을 직접 가리킵니다. git describe ... 를 사용하여 현재 커밋을 사람이 읽을 수 있는 형식으로 작성합니다.

도움이 되기를 바랍니다.


Jakub Narębski

죄송합니다. 이것은 또 다른 명령줄 답변이지만 이 질문을 찾았을 때 찾던 내용이며 이러한 답변 중 많은 부분이 도움이 되었습니다. 내 솔루션은 다음 bash 쉘 기능입니다.

 get_branch () { git rev-parse --abbrev-ref HEAD | grep -v HEAD || \ git describe --exact-match HEAD 2> /dev/null || \ git rev-parse HEAD }

git checkout 대한 인수로 직접 사용할 수 있는 것을 제공해야 합니다.

  • 로컬 지점: feature/HS-0001
  • 태그가 지정된 커밋(분리됨): v3.29.5
  • 원격 분기에서(분리됨, 태그 없음): SHA1
  • 다른 분리된 커밋: SHA1

dmaestro12

작업 디렉토리 명령에서 git bash를 사용할 수 있습니다.

 git status -b

그것은 당신이 어느 지점에 있는지 알려줄 것입니다. 유용한 명령 중 일부는 다음과 같습니다.

 -s

--short 짧은 형식으로 출력을 제공합니다.

-b --branch 짧은 형식으로도 분기 및 추적 정보를 표시합니다.

--porcelain[=] 스크립트에 대해 구문 분석하기 쉬운 형식으로 출력을 제공합니다. 이는 짧은 출력과 유사하지만 Git 버전 전체에서 사용자 구성에 관계없이 안정적으로 유지됩니다. 자세한 내용은 아래를 참조하세요.

version 매개변수는 형식 버전을 지정하는 데 사용됩니다. 이것은 선택 사항이며 기본적으로 원래 버전 v1 형식입니다.

--long 출력을 긴 형식으로 제공합니다. 이것이 기본값입니다.

-v --verbose 변경된 파일 이름 외에도 커밋되도록 준비된 텍스트 변경 사항도 표시합니다(예: git diff --cached의 출력). -v가 두 번 지정되면 아직 준비되지 않은 작업 트리의 변경 사항도 표시합니다(예: git diff의 출력).


Prateek Gangwal

시간이 지남에 따라 분기 목록이 정말 길어질 수 있습니다.

다른 솔루션 중 일부는 훌륭하지만 다음은 내가하는 일입니다 (Jacob의 답변에서 단순화).

 git branch | grep \*

지금,

 git status

작동하지만 로컬 변경 사항이 있는 경우 에만


karthikr

git status

또한 변경 사항과 함께 분기 이름을 제공합니다.

 >git status On branch master // <-- branch name here .....

Satheesh Kumar

이 두 명령 중 하나를 사용하는 것이 좋습니다.

git branch | grep -e "^*" | cut -d' ' -f 2

또는

git status | sed -n 1p | cut -d' ' -f 3

또는(더 자세한 정보)

git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1p


jackotonye

Netbeans에서 버전 관리 주석이 활성화되어 있는지 확인하십시오(보기 -> 버전 관리 레이블 표시). 그러면 프로젝트 이름 옆에 분기 이름이 표시됩니다.

http://netbeans.org/bugzilla/show_bug.cgi?id=213582


Saroj

이것은 어떻습니까?

 { git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"

ShogunPanda

현재 분기 이름을 출력하는 git-cbr ( 현재 분기 )이라는 간단한 스크립트가 있습니다.

 #!/bin/bash git branch | grep -e "^*"

이 스크립트를 사용자 지정 폴더( ~/.bin )에 넣습니다. 폴더는 $PATH 있습니다.

이제 git repo에 있을 때 git cbr 을 입력하여 현재 브랜치 이름을 출력하기만 하면 됩니다.

 $ git cbr * master

git git-arg1 이라는 이름의 스크립트를 실행하려고 하기 때문에 작동합니다. 예를 들어 git branch git-branch 등의 스크립트를 실행하려고 합니다.


Diego Pino

다음 쉘 명령은 현재 있는 분기를 알려줍니다.

 git branch | grep ^\*

분기를 알고 싶을 때마다 긴 명령을 입력하고 싶지 않고 Bash를 사용하는 경우 명령에 짧은 별칭을 지정하십시오(예: alias cb ).

 alias cb='git branch | grep ^\*'

브랜치 마스터에 있고 프롬프트가 $ 이면 * master 가 표시됩니다.

 $ cb * master

mrrusof

git-branch 이름을 표시하도록 bash 출력을 영구적으로 설정할 수 있습니다. 항상 $ git status 를 입력할 필요 없이 다른 브랜치로 작업할 때 매우 편리합니다. Github 저장소 git-aware-prompt .

터미널(ctrl-alt-t)을 열고 명령을 입력하십시오.

 mkdir ~/.bash cd ~/.bash git clone git://github.com/jimeh/git-aware-prompt.git

sudo nano ~/.bashrc 명령(Ubuntu용)으로 .bashrc를 편집하고 맨 위에 다음을 추가합니다.

 export GITAWAREPROMPT=~/.bash/git-aware-prompt source "${GITAWAREPROMPT}/main.sh"

그런 다음 코드를 붙여넣습니다.

 export PS1="\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ "

이전에 설치 코드를 붙여넣은 동일한 파일의 끝에 이렇게 하면 색상이 지정된 출력이 제공됩니다. 여기에 이미지 설명 입력


Kirill Zhuravlov

분리된 헤드에 있을 때 분기 이름 또는 SHA1을 반환합니다.

 git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD

이것은 @dmaestro12 답변의 짧은 버전이며 태그 지원이 없습니다.


user

분리된 HEAD 상태에서도 마지막 분기/태그를 체크아웃하려는 경우.

 git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev

업데이트 awk가 있고 두렵지 않다면 이것은 더 좋습니다.

 git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'

Ryan

나는 이것이 늦었다는 것을 알고 있지만 linux/mac에서는 터미널에서 다음을 사용할 수 있습니다.

 git status | sed -n 1p

설명:

git status -> 작업 트리 상태를 가져옵니다.
sed -n 1p -> 상태 본문에서 첫 번째 줄을 가져옵니다.

위 명령에 대한 응답은 다음과 같습니다.

 "On branch your_branch_name"

skippy

Mac을 사용하여 PS1 추가:

 PS1='\W@\u >`[ -d .git ] && git branch | grep ^*|cut -d" " -f2`> $ '

위의 명령을 실행하기 전에:

여기에 이미지 설명 입력

해당 명령을 실행한 후:

여기에 이미지 설명 입력

.git 폴더가 있는지 여부를 확인하는 [-d .git] 때문에 오류가 표시되지 않으므로 걱정하지 마십시오.


Abdennour TOUMI

Jenkins에서 실행하는 경우 다음과 같이 GIT_BRANCH 변수를 사용할 수 있습니다. https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

git 플러그인은 스크립트에서 사용할 수 있는 몇 가지 환경 변수를 설정합니다.

GIT_COMMIT - 현재의 SHA

GIT_BRANCH - 현재 사용 중인 분기의 이름(예: "master" 또는 "origin/foo")

GIT_PREVIOUS_COMMIT - 동일한 분기에서 이전에 빌드된 커밋의 SHA(분기의 첫 번째 빌드에서 현재 SHA)

GIT_URL - 저장소 원격 URL

GIT_URL_N - 원격이 2개 이상 있는 경우 저장소 원격 URL(예: GIT_URL_1, GIT_URL_2)

GIT_AUTHOR_EMAIL - 커미터/저자 이메일

GIT_COMMITTER_EMAIL - 커미터/저자 이메일


user3405314

출처 : http:www.stackoverflow.com/questions/6245570/how-to-get-the-current-branch-name-in-git

반응형