저는 Subversion 배경을 가지고 있으며 지점이있을 때 "이 작업 파일이이 지점을 가리키고 있습니다."
그러나 Git을 사용하면 NetBeans 또는 Notepad ++에서 파일을 마스터 또는 다른 브랜치에 묶었는지 여부를 편집 할 때 확실하지 않습니다.
git
bash 에는 아무런 문제가 없으며 내가하고있는 일을 알려줍니다.
저는 Subversion 배경을 가지고 있으며 지점이있을 때 "이 작업 파일이이 지점을 가리키고 있습니다."
그러나 Git을 사용하면 NetBeans 또는 Notepad ++에서 파일을 마스터 또는 다른 브랜치에 묶었는지 여부를 편집 할 때 확실하지 않습니다.
git
bash 에는 아무런 문제가 없으며 내가하고있는 일을 알려줍니다.
답변:
git branch
리포지토리의 모든 지점을 표시해야합니다. 별표 표시된 지점은 현재 지점입니다.
현재 지점의 이름 만 검색하려면 다음을 수행하십시오.
git rev-parse --abbrev-ref HEAD
git checkout --orphan foo
다음 git branch
쇼 지점에 실패했습니다 foo
. 반면 git symbolic-ref HEAD
제안 다른 대답했다.
다른 분기를 나열하지 않고 현재 분기를 표시하려면 다음을 수행하십시오.
git rev-parse --abbrev-ref HEAD
참고:
git branch
쇼 * (no branch)
... 또한 쓸모가
git rev-parse --abbrev-ref HEAD 2>/dev/null
/ dev / null 부분은 아직 HEAD가 아닌 새 저장소를 방금 작성한 경우 오류가 표시되지 않도록합니다.
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 월
git rev-parse --abbrev-ref HEAD
에서는 HEAD
머리를 분리했을 때 표시 됩니다.
git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
같은 문자열을 표시하기 때문에 여전히 HEAD detached at a63917f
그렇습니다. 이것은 중요합니다.
내 자신의 참조를 위해 (그러나 다른 사람들에게 유용 할 수 있음)이 스레드에서 언급 된 대부분의 (기본 명령 줄) 기술에 대한 개요를 만들었습니다. 각 기술은 여러 가지 사용 사례에 적용됩니다.
결과 :
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
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로 수행되었습니다)
git describe --all --exact-match 2>/dev/null | sed 's=.*/=='
가장 좋은 해결책이었다 (태그 및 브랜치 헤드에 대한 좋은 이름, 무작위 분리 헤드에 대한 출력 없음)
git describe
동일한 커밋을 참조하는 여러 브랜치가있을 때 사용 에 심각한 실패가 있음을 발견 했습니다. 예 : 바로 그 git checkout -b foo
중 하나를 사용합니다. 필터링 된 출력을 사용하도록 전략을 변경 하고 결과가 분리 된 헤드에 관한 것 인 경우 git branch
에만 사용 git describe
합니다.
git branch --no-color
파일 이름에 성가신 터미널 이스케이프 코드가 없는지 확인해야합니다.
git 버전 2.22부터는 다음을 사용할 수 있습니다.
git branch --show-current
매뉴얼 페이지에 따라 :
현재 지점의 이름을 인쇄하십시오. 분리 된 HEAD 상태에서는 아무 것도 인쇄되지 않습니다.
하나 더 대안 :
git name-rev --name-only HEAD
echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
git checkout master && git name-rev --name-only HEAD # ac-187
예상대로 작동하지 않습니다
git branch --list
만 말했다 * (HEAD detached at 7127db5)
. 이렇게 git rev-parse --abbrev-ref HEAD
만은 말한다 HEAD
등등.
충분히 간단합니다. 나는 하나의 라이너로 만들었습니다 (bash)
git branch | sed -n '/\* /s///p'
(신용 : 속죄)
그리고 내가있는 동안, 원격 추적 지점을 얻는 하나의 라이너 (있는 경우)
git rev-parse --symbolic-full-name --abbrev-ref @{u}
sed -n 's/\* //p'
트릭을 수행합니다. 나는 편집증을 향해 경향이 있기 때문에 그것을 고정시킬 것입니다 sed -n 's/^\* //p'
.
Linux의 저장소 디렉토리에서 명령 행 (콘솔)을 입력하면됩니다.
$ git status
다음과 유사한 텍스트가 표시됩니다.
...
On branch master
...
이는 현재 master
지점 에 있음을 의미합니다 . 그 시점에서 파일을 편집하고 동일한 로컬 리포지토리 (Git 버전 제어 관리하에있는 파일을 포함하는 로컬 디렉토리)에있는 경우이 분기에서 파일을 편집합니다.
git status
결과를 얻는 첫 번째 출력 줄만 사용 하고 얻을 수 있습니다 . 버전 차이도 고려해야합니다. git status | head -1
# On branch master
git status | grep 'On branch'
. 이는 동일한 효과를 가져야합니다 (Git 버전이 다르게 표시되는 경우를 의미하지는 않습니다). 또는 git branch | grep '*'
시작 지점에 별표가있는 지점의 이름을 표시합니다.
<tick>git status | head -1<tick>.gsub('# On branch ', '')
git status
관리중인 파일이 많은 경우 값을 반환하는 데 시간이 오래 걸릴 수 있습니다.
git status
전체 페이지 생성 시간이 줄어들 수 있습니다.
git symbolic-ref -q --short HEAD
현재 분기 이름이 필요한 스크립트에서 이것을 사용합니다. 현재 분기 이름 인 HEAD에 대한 현재 짧은 기호 참조를 표시합니다.
git branch | grep -e "^*" | cut -d' ' -f 2
지점 이름 만 표시합니다
git branch
현재 지점 이름 만 표시하십시오.
자식 분기는 모든 분기를 표시하고 별표로 현재 분기를 강조 표시하지만 많은 분기를 사용할 때 너무 번거로울 수 있습니다.
현재있는 지점 만 표시하려면 다음을 사용하십시오.
git rev-parse --abbrev-ref HEAD
git branch --contains
때때로 둘 이상의 지점을 나열합니다.
좋은 ol 'awk를 사용하여 Oliver Refalo 와 길이가 같은 명령 줄 솔루션을 찾았습니다 .
git branch | awk '/^\*/{print $2}'
awk
" {}
정규식과 일치하는 줄에 내용을 입력하십시오"라고 읽습니다 . 기본적으로 공백으로 구분 된 필드를 가정하므로 두 번째 필드를 인쇄합니다. 분기가있는 줄에만 *가 있다고 가정 할 수 있다면 ^를 삭제할 수 있습니다. 아, 배쉬 골프!
현재 브랜치의 이름을 알려주는 git-aware shell prompt를 사용하지 않는 이유는 무엇입니까? git status
또한 도움이됩니다.
어떻게 git-prompt.sh 에서 contrib/
에 정의 된 바와 같이, (자식 버전 2.3.0)를 수행 __git_ps1
도우미 기능 :
먼저 진행중인 리베이스 가 감지되는 경우가 있습니다. Git은 rebase 프로세스 중에 unnamed branch (detached HEAD)를 사용하여 원자화하고 원래 분기는 다른 곳에 저장합니다.
는 IF .git/HEAD
파일 (망할 놈의 고대 역사에서 매우 드문 경우) 심볼릭 링크를, 그것은 사용git symbolic-ref HEAD 2>/dev/null
그렇지 않으면, 읽습니다 .git/HEAD
파일 . 다음 단계는 내용에 따라 다릅니다.
이 파일이 존재하지 않으면 현재 분기가없는 것입니다. 일반적으로 리포지토리가없는 경우에 발생합니다.
'ref: '
접두어로 시작하면 .git/HEAD
symref (기호 참조)이며 정상적인 분기에 있습니다. 이 접두사를 제거 refs/heads/
하여 전체 이름 을 얻고, 현재 분기의 짧은 이름을 얻으려면 스트립 하십시오.
b="${head#ref: }"
# ...
b=${b##refs/heads/}
로 시작하지 않으면 'ref: '
HEAD (익명 브랜치)로 분리되어 커밋을 직접 가리 킵니다. git describe ...
현재 커밋을 사람이 읽을 수있는 형태로 쓰는 데 사용 합니다.
도움이 되길 바랍니다.
git describe --contains --all HEAD
현재이 페이지의 다른 곳에서는 볼 수없는 기록이 있는 것 같습니다. 확실히 알겠지만, 링크 전용 답변은 StackOverflow에서 권장되지 않습니다.
git-prompt.sh
(일명 __git_ps1
) 어떻게 하는가에 대한 설명을 추가 했습니다 ...
자식 상태에 대한 소음이 적은 버전은 트릭을 수행합니다.
git status -bsuno
인쇄
## branch-name
죄송합니다. 이것은 또 다른 명령 줄 답변이지만,이 질문을 찾았을 때 제가 찾던 것이었고 많은 답변이 도움이되었습니다. 내 솔루션은 다음 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
git checkout
.
작업 디렉토리 명령에서 git bash를 사용할 수 있습니다.
git status -b
그것은 당신이 어떤 브랜치에 있는지 알려줄 것입니다.
-s
--short 출력을 짧은 형식으로 제공합니다.
-b --branch 분기 및 추적 정보를 짧은 형식으로 표시합니다.
--porcelain [=] 스크립트를 구문 분석하기 쉬운 형식으로 출력합니다. 이것은 짧은 출력과 비슷하지만 사용자 구성에 관계없이 Git 버전에서 안정적으로 유지됩니다. 자세한 내용은 아래를 참조하십시오.
version 매개 변수는 형식 버전을 지정하는 데 사용됩니다. 이것은 선택 사항이며 기본값은 원래 버전 v1 형식입니다.
--long 출력을 긴 형식으로 제공합니다. 이것이 기본값입니다.
-v --verbose 변경된 파일 이름 외에도 커밋되기 위해 준비된 텍스트 변경 사항 (예 : git diff --cached 출력)도 표시합니다. -v를 두 번 지정하면 아직 준비되지 않은 작업 트리의 변경 사항도 표시됩니다 (예 : git diff 출력).
이 두 명령 중 하나를 사용하는 것이 좋습니다.
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
Netbeans에서 버전 관리 주석이 사용 가능한지 확인하십시오 (보기-> 버전 레이블 표시). 그런 다음 프로젝트 이름 옆에 지점 이름을 볼 수 있습니다.
이건 어때?
{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
symbolic-ref
제품은 또한 필요 --short
로 BRANCHNAME 접두사를 방지하기 위해 refs/heads/
?
현재 분기 이름을 인쇄 하는 간단한 스크립트 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
.
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\]\$ "
다음 쉘 명령은 현재있는 지점을 알려줍니다.
git branch | grep ^\*
분기를 알고 싶을 때마다 Bash를 사용하고 Bash를 사용할 때마다 긴 명령을 입력하지 않으려면 명령에 짧은 별칭 (예 : alias cb
)을 지정하십시오.
alias cb='git branch | grep ^\*'
지점 마스터에 있고 프롬프트가 $
이면 * master
다음과 같이 표시됩니다.
$ cb
* master
git branch | grep '^\*'
분리 된 헤드에서 분기 이름 또는 SHA1을 리턴합니다.
git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD
이것은 @ dmaestro12의 답변의 짧은 버전이며 태그 지원이 없습니다.
git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
마지막 분기 / 태그가 분리 된 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}'
checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9
는 여전히 일부 사례를 명확하게하는 데 도움이되는 유용한 트릭입니다.
git reflog | awk '$3=="checkout:" {print $NF; exit}'
다음과 같이 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-커미터 / 저자 이메일
.git/HEAD
가 부모 디렉토리에 파일을 표시하게하십시오