Git에서 현재 지점 이름을 얻는 방법은 무엇입니까?


2591

저는 Subversion 배경을 가지고 있으며 지점이있을 때 "이 작업 파일이이 지점을 가리키고 있습니다."

그러나 Git을 사용하면 NetBeans 또는 Notepad ++에서 파일을 마스터 또는 다른 브랜치에 묶었는지 여부를 편집 할 때 확실하지 않습니다.

gitbash 에는 아무런 문제가 없으며 내가하고있는 일을 알려줍니다.


11
IDE .git/HEAD가 부모 디렉토리에 파일을 표시하게하십시오
Tino

101



9
Git 2.22 (2019 년 2 분기)를 사용하면 더 간단한 접근 방식이 있습니다 git branch --show-current. 여기에 내 대답을 참조 하십시오 .
VonC

답변:


2302
git branch

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

현재 지점의 이름 만 검색하려면 다음을 수행하십시오.

git rev-parse --abbrev-ref HEAD

그러나 메모장 ++ 및 Netbeans에는 도움이되지 않습니다. 그냥 git bash (및 Probobly Vim)와 나는 그것을 언급했다. 커맨드 라인이 아닌 다른 Ide 및 텍스트 편집기와 함께 작업하려고합니다.
mike628

@ mike628 사실 그들은 GUI를 통해 접근 할 수있는 것을 원한다는 것을 제외하고는 당신을 돕고 있습니다. 옳은?
Tadeck

2
이클립스에서 기꺼이 작업하고 싶다면 "eGit"이라는 프로그램이있다. 여기에는 모든 저장소에 대한 현재 브랜치를 알려주는 GUI가있다. 그렇지 않으면, 나는 모른다.. 당신은 당신이 선택하고 싶은 프로그램 (있는 경우)과 호환되는 어떤 플러그인을 사용하길 원하는 크리에이터의 자비에있을 것이다.
roberttdev

2
를 수행 한 후 git checkout --orphan foo다음 git branch쇼 지점에 실패했습니다 foo. 반면 git symbolic-ref HEAD제안 다른 대답했다.
Marcus Junius Brutus

2
downvote, 우리는 모든 가지 표준 출력으로는 현재 분기를 원하는
알렉산더 밀스

4656

다른 분기를 나열하지 않고 현재 분기를 표시하려면 다음을 수행하십시오.

git rev-parse --abbrev-ref HEAD

참고:


132
@ChrisNelson : 모든 분기의 긴 목록이 아닌 현재 분기 만 표시하기 때문입니다.
avakar

73
좋은 점은 슬프게도 '분리 된 HEAD'상태에 있으면 작동하지 않습니다 ( 'HEAD'를 출력하므로 완전히 쓸모가 없습니다).
Carlos Campderrós

34
당신이 '분리 HEAD'상태에있는 경우, 나는이 속하는 분기의 더 추적이없는 자식 내부에서 추측하기 때문에 git branch* (no branch)... 또한 쓸모가
카를로스 Campderrós

76
"git symbolic-ref --short HEAD"도 같은 목적으로 작동합니다
dusktreader

22
git rev-parse --abbrev-ref HEAD 2>/dev/null / dev / null 부분은 아직 HEAD가 아닌 새 저장소를 방금 작성한 경우 오류가 표시되지 않도록합니다.
Paradiesstaub 2016 년

523

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\///"

Darien 26. 2014 년 3 월


7
다른 모든 답변과 마찬가지로, 이것은 당신이 '분리 된 HEAD'상태에있을 때 작동하지 않습니다
Carlos Campderrós

51
@ CarlosCampderrós : HEAD 상태가 분리 된 경우 현재 분기와 같은 것은 없습니다. 결국, 커밋은 하나 이상의 분기로 0에 도달 할 수 있습니다.
Flimm

2
HEAD가 없을 때 빈 자식 저장소에 문제가 생깁니다
Arne

8
git 버전 2.4.4 git rev-parse --abbrev-ref HEAD에서는 HEAD머리를 분리했을 때 표시 됩니다.
peterhil

가장 좋은 대답은 아무것도 표시하지 않거나 HEAD를 표시하는 다른 답변과 달리 분리 된 상태의 경우와 git symbolic-ref HEAD | sed -e "s/^refs\/heads\///" 같은 문자열을 표시하기 때문에 여전히 HEAD detached at a63917f그렇습니다. 이것은 중요합니다.
Bernard

264

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

  • 현지 지사 (마스터)
  • 로컬 지점과 동기화 된 원격 추적 지점 (마스터와 동일한 커밋에서 출처 / 마스터)
  • 로컬 지점과 동기화되지 않은 원격 추적 지점 (원본 / 기능 -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로 수행되었습니다)


6
요약하면, 내가 손으로 할 일을하는 사람은 아무도 없습니다.
bukzor

6
이것은 나에게 매우 도움이되었다 : 나에게 git describe --all --exact-match 2>/dev/null | sed 's=.*/=='가장 좋은 해결책이었다 (태그 및 브랜치 헤드에 대한 좋은 이름, 무작위 분리 헤드에 대한 출력 없음)
Alex Dupuy

1
그러나 방금 git describe동일한 커밋을 참조하는 여러 브랜치가있을 때 사용 에 심각한 실패가 있음을 발견 했습니다. 예 : 바로 그 git checkout -b foo중 하나를 사용합니다. 필터링 된 출력을 사용하도록 전략을 변경 하고 결과가 분리 된 헤드에 관한 것 인 경우 git branch에만 사용 git describe합니다.
Alex Dupuy

실제로 git branch --no-color파일 이름에 성가신 터미널 이스케이프 코드가 없는지 확인해야합니다.
Alex Dupuy

2
매우 철저한 감사를드립니다.
Alice Purcell

154

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

git branch --show-current

매뉴얼 페이지에 따라 :

현재 지점의 이름을 인쇄하십시오. 분리 된 HEAD 상태에서는 아무 것도 인쇄되지 않습니다.


2
예, 지난 3 월에 해당 페이지의 의견에서 stackoverflow.com/questions/6245570/…을 언급했습니다 . 그리고 stackoverflow.com/a/55088865/6309에서 .
VonC 2016 년

5
적어도 언급 된 HEAD 상태 에서는 작동 하지 않습니다 . 자식 2.22를 받고 그냥 잃어버린 시간은 ... 아무것도 컴파일
데이비드 Deprost에게

136

하나 더 대안 :

git name-rev --name-only HEAD

그것은 또한으로 검색 할 수 있습니다echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
앙투안

12
HEAD가 마스터 및 기능 분기에 대해 동일한 경우 (예 : 병합 중) 작동하지 않습니다. 기능 분기에서 실행 되더라도 '마스터'를 반환합니다.
Orest Hera

1
git checkout master && git name-rev --name-only HEAD # ac-187예상대로 작동하지 않습니다
Alexander Abashkin

병합하기 직전에 변수에 저장하고 특정 커밋을 체크 아웃하면 HEAD가 연결 해제 될 수 있습니다. 이 경우에는 잘 작동합니다.
Ishaan Sejwal

4
Jenkins 파이프 라인 에서이 작업을 수행하고 있습니다. 그래서 이것은 당분간 최고의 답변 인 것으로 보입니다. 이렇게 git branch --list만 말했다 * (HEAD detached at 7127db5). 이렇게 git rev-parse --abbrev-ref HEAD만은 말한다 HEAD등등.
Mig82

91

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

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

(신용 : 속죄)

그리고 내가있는 동안, 원격 추적 지점을 얻는 하나의 라이너 (있는 경우)

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

8
슬래시가 너무 많습니다! :) sed -n 's/\* //p'트릭을 수행합니다. 나는 편집증을 향해 경향이 있기 때문에 그것을 고정시킬 것입니다 sed -n 's/^\* //p'.
Mark Reed

64

Linux의 저장소 디렉토리에서 명령 행 (콘솔)을 입력하면됩니다.

$ git status

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

...
On branch master
...

이는 현재 master지점 에 있음을 의미합니다 . 그 시점에서 파일을 편집하고 동일한 로컬 리포지토리 (Git 버전 제어 관리하에있는 파일을 포함하는 로컬 디렉토리)에있는 경우이 분기에서 파일을 편집합니다.


2
원하는 것을 기반으로하여 다음과 같은 git status결과를 얻는 첫 번째 출력 줄만 사용 하고 얻을 수 있습니다 . 버전 차이도 고려해야합니다. git status | head -1# On branch master
Joshua Pinter

@JoshPinter :을 사용할 수도 있습니다 git status | grep 'On branch'. 이는 동일한 효과를 가져야합니다 (Git 버전이 다르게 표시되는 경우를 의미하지는 않습니다). 또는 git branch | grep '*'시작 지점에 별표가있는 지점의 이름을 표시합니다.
Tadeck

그러나 그것은 잘 작동하며 더 유연 할 수 있습니다. dev Rails 앱에 지점 이름 만 표시 한 최종 결과는 다음과 같습니다.<tick>git status | head -1<tick>.gsub('# On branch ', '')
Joshua Pinter

1
git status관리중인 파일이 많은 경우 값을 반환하는 데 시간이 오래 걸릴 수 있습니다.
Tin Man

예를 들어 웹 페이지에 분기를 인쇄하려는 경우 git status전체 페이지 생성 시간이 줄어들 수 있습니다.
Artem Russakovskii 18시 06 분

36
git symbolic-ref -q --short HEAD

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


1
고마워요, 잘 작동합니다! -스크립트에 "-C path_to_folder"도 추가하고 있습니다.
Tony

1
-q 옵션을 사용하면 "분리 된 HEAD"상태에서 오류 코드를 리턴하지만 stderr에 아무 것도 인쇄하지 않기 때문에 좋은 해결책입니다.
hallidave

이것은 단지 어떤 커밋하지 않고 신선한 REPO에 나를 위해 일한 솔루션입니다
kundasaba

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

지점 이름 만 표시합니다


분기에 이와 같은 "* (SUM_BRANCH_01에서 헤드 분리됨")이 표시되면 "git branch | grep -e"^ * "| cut -d ''-f 5 | cut -d ')'-f 1 "
Dylan Kapp

방금 현재 지점 이름을 얻기 위해이 동일한 스크립트를 만들었습니다. 나는 그것이 diffs에 도움이 될 것이라고 생각했습니다.
tggagne

25

git branch 현재 지점 이름 만 표시하십시오.

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

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

git rev-parse --abbrev-ref HEAD

이것은 ci 및 기타 빌드 도구에 좋습니다!
phouse512

스크립트에서 사용하기위한 최상의 답변
Ben Keil

1
@DylanNicholson은 git branch --contains때때로 둘 이상의 지점을 나열합니다.
Joe Chacko

22

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

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

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


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

18

현재 브랜치의 이름을 알려주는 git-aware shell prompt를 사용하지 않는 이유는 무엇입니까? git status또한 도움이됩니다.


어떻게 git-prompt.sh 에서 contrib/에 정의 된 바와 같이, (자식 버전 2.3.0)를 수행 __git_ps1도우미 기능 :

  1. 먼저 진행중인 리베이스 가 감지되는 경우가 있습니다. Git은 rebase 프로세스 중에 unnamed branch (detached HEAD)를 사용하여 원자화하고 원래 분기는 다른 곳에 저장합니다.

  2. 는 IF .git/HEAD파일 (망할 놈의 고대 역사에서 매우 드문 경우) 심볼릭 링크를, 그것은 사용git symbolic-ref HEAD 2>/dev/null

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

    • 이 파일이 존재하지 않으면 현재 분기가없는 것입니다. 일반적으로 리포지토리가없는 경우에 발생합니다.

    • 'ref: '접두어로 시작하면 .git/HEADsymref (기호 참조)이며 정상적인 분기에 있습니다. 이 접두사를 제거 refs/heads/하여 전체 이름 을 얻고, 현재 분기의 짧은 이름을 얻으려면 스트립 하십시오.

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

도움이 되길 바랍니다.


3
그리고 git-aware shell prompt를 개발하고 있다면 여기에서 어떤 대답을 사용해야합니까? 거북을 끝까지 내립니다.
tripleee

1
@tripleee : github.com/git/git/blob/master/contrib/completion/git-prompt.sh에서 아이디어를 빌리십시오
Jakub Narębski

4
git describe --contains --all HEAD현재이 페이지의 다른 곳에서는 볼 수없는 기록이 있는 것 같습니다. 확실히 알겠지만, 링크 전용 답변은 StackOverflow에서 권장되지 않습니다.
tripleee

2
@tripleee : 나는 git-prompt.sh(일명 __git_ps1) 어떻게 하는가에 대한 설명을 추가 했습니다 ...
Jakub Narębski

17

자식 상태에 대한 소음이 적은 버전은 트릭을 수행합니다.

git status -bsuno

인쇄

## branch-name

1
## develop ... origin / develop
Kalpesh Soni

16

죄송합니다. 이것은 또 다른 명령 줄 답변이지만,이 질문을 찾았을 때 제가 찾던 것이었고 많은 답변이 도움이되었습니다. 내 솔루션은 다음 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

1
이것을 게시 해 주셔서 감사합니다. 다른 답변은에 대한 논쟁으로 사용할 수있는 것을 항상 생성하는 데 관심이없는 것 같습니다 git checkout.
zwol

15

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

git status -b

그것은 당신이 어떤 브랜치에 있는지 알려줄 것입니다.

-s

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

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

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

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

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

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


14
git status 

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

예 :

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

13

시간이 지남에 따라 우리는 정말 긴 지점 목록을 가질 수 있습니다.

다른 해결책 중 일부는 훌륭하지만 여기에 내가하는 일이 있습니다 (야곱의 대답에서 단순화 됨).

git branch | grep \*

지금,

git status

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


13

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

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


12

Netbeans에서 버전 관리 주석이 사용 가능한지 확인하십시오 (보기-> 버전 레이블 표시). 그런 다음 프로젝트 이름 옆에 지점 이름을 볼 수 있습니다.

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


버전 관리 주석이 활성화 된 상태에서 프로젝트 (또는 파일 또는 즐겨 찾기) 폴더 위로 마우스를 가져 가면 현재 분기를 볼 수 있습니다.
idclaar

12

이건 어때?

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

1
분리 된 HEAD 케이스를 잘 처리하기 때문에 훨씬 더 나은 답변입니다.
Pat

2
git 명령을 감싸기 위해 {}가 아닌 ()를 사용해야하는 것 같습니다.
Pat

@Pat ()처럼 별도의 서브 쉘을 생성 할 필요가 없습니다. {}를 추가해야한다는 점을 제외하고는 괜찮습니다. 또는} 전에 줄 바꿈. 실제로 명령을 그룹화 할 필요가없는 한 {}를 완전히 생략 할 수 있습니다.
aij

하지 않습니다 symbolic-ref제품은 또한 필요 --short로 BRANCHNAME 접두사를 방지하기 위해 refs/heads/?
rjp

11

현재 분기 이름을 인쇄 하는 간단한 스크립트 git-cbr( current branch )가 있습니다.

#!/bin/bash

git branch | grep -e "^*"

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

이제 git repo에있을 때 단순히 git cbr현재 분기 이름을 인쇄하기 위해 입력 하십시오.

$ git cbr
* master

이것은 git명령이 첫 번째 인수를 취하고 이름이라는 스크립트를 실행하려고하기 때문에 작동합니다 git-arg1. 예를 들어 , 등 git branch의 스크립트를 실행하려고합니다 git-branch.


11

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

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

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

sudo nano ~/.bashrc명령 (우분투 용)으로 .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\]\$ "

동일한 파일의 끝에서 설치 코드를 이전에 붙여 넣었습니다. 이것은 당신에게 컬러 출력을 줄 것입니다 :여기에 이미지 설명을 입력하십시오


10

다음 쉘 명령은 현재있는 지점을 알려줍니다.

git branch | grep ^\*

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

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

지점 마스터에 있고 프롬프트가 $이면 * master다음과 같이 표시됩니다.

$ cb
* master

이것은 질문에 대한 답변을 제공하지 않습니다. 저자에게 비평을하거나 설명을 요청하려면 게시물 아래에 의견을 남기십시오. - 리뷰에서
Rashwan L

1
왜 그렇게 생각하십니까?
mrrusof

OP에 대한 게시물에 댓글을 달고 설명해야합니다. 그러면 게시물을 이해하기가 더 쉬워집니다.
Rashwan L

1
완벽하게 이해됩니다.
mrrusof

1
zsh를 사용한다면 grep 정규식을 작은 따옴표로 묶어야합니다.git branch | grep '^\*'
aaaarrgh

9

분리 된 헤드에서 분기 이름 또는 SHA1을 리턴합니다.

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

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


8
더 나은 :git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
17 초에 blueyed

8

마지막 분기 / 태그가 분리 된 HEAD 상태에서도 체크 아웃하려면.

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

업데이트 awk가 있고 무서워하지 않으면 더 좋습니다.

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

rev | cut -d' ' -f1| rev단순화 될 수있다awk '{print $NF}'
스티브 Buzonas

1
이것은 완벽한 방법은 아니지만 해시로 특정 버전을 체크 아웃 할 수 있으므로 reflog checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9는 여전히 일부 사례를 명확하게하는 데 도움이되는 유용한 트릭입니다.
Alex Dupuy

1
더 짧아git reflog | awk '$3=="checkout:" {print $NF; exit}'
jthill

6

나는 이것이 늦었지만 리눅스 / 맥에서는 터미널에서 다음을 사용할 수 있다는 것을 알고있다.

git status | sed -n 1p

설명:

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

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

"On branch your_branch_name"

2
head -1일반적인 방법으로
bukzor

5

다음과 같이 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-리모트가 둘 이상인 경우 리포지토리 리모트 URL (예 : GIT_URL_1, GIT_URL_2)

GIT_AUTHOR_EMAIL-커미터 / 저자 이메일

GIT_COMMITTER_EMAIL-커미터 / 저자 이메일


5

PS1Mac 을 사용하여 추가하십시오 .

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

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

여기에 이미지 설명을 입력하십시오

해당 명령을 실행 한 후 :

여기에 이미지 설명을 입력하십시오

GIT 저장소가 아닌 [-d .git]경우 .git폴더가 존재 하는지 여부를 확인 하므로 오류가 표시 되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.