저는 Subversion을 배경으로 하고 있고 분기가 있을 때 "이 작업 파일이 이 분기를 가리킵니다"라는 작업을 하고 있다는 사실을 알고 있었습니다.
그러나 Git을 사용하면 NetBeans 또는 Notepad++에서 파일을 편집할 때 마스터 또는 다른 분기에 연결되어 있는지 확실하지 않습니다.
git
에는 문제가 없으며 내가 하는 일을 알려줍니다.
질문자 :mike628
저는 Subversion을 배경으로 하고 있고 분기가 있을 때 "이 작업 파일이 이 분기를 가리킵니다"라는 작업을 하고 있다는 사실을 알고 있었습니다.
그러나 Git을 사용하면 NetBeans 또는 Notepad++에서 파일을 편집할 때 마스터 또는 다른 분기에 연결되어 있는지 확실하지 않습니다.
git
에는 문제가 없으며 내가 하는 일을 알려줍니다.
다른 브랜치를 나열하지 않고 현재 있는 브랜치를 표시하려면 다음을 수행할 수 있습니다.
git rev-parse --abbrev-ref HEAD
참조:
git branch
리포지토리의 모든 로컬 지점을 표시해야 합니다. 별표 표시된 지점이 현재 지점입니다.
현재 있는 지점의 이름만 검색하려면 다음을 수행할 수 있습니다.
git rev-parse --abbrev-ref HEAD
또는 Git 2.22 이상:
git branch --show-current
전체 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월
내 자신의 참조를 위해(그러나 다른 사람들에게 유용할 수 있음) 이 스레드에서 언급된 대부분의(기본 명령줄) 기술에 대한 개요를 작성했으며 각각은 여러 사용 사례에 적용되었습니다.
결과:
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 버전 2.22부터 다음을 사용할 수 있습니다.
git branch --show-current
매뉴얼 페이지에 따라:
현재 분기의 이름을 인쇄합니다. detached HEAD 상태에서는 아무 것도 인쇄되지 않습니다.
또 하나의 대안:
git name-rev --name-only HEAD
충분히 간단합니다. 하나의 라이너로 얻었습니다 (bash)
git branch | sed -n '/\* /s///p'
(크레딧: Limited Atonement)
그리고 내가 거기 있는 동안 원격 추적 분기(있는 경우)를 얻을 수 있는 하나의 라이너
git rev-parse --symbolic-full-name --abbrev-ref @{u}
Linux의 경우 저장소 디렉토리에 명령줄(콘솔)을 입력하기만 하면 됩니다.
$ git status
다음과 유사한 텍스트가 표시됩니다.
... On branch master ...
master
브랜치에 있음을 의미합니다. 그 순간에 파일을 편집 중이고 동일한 로컬 리포지토리(Git 버전 제어 관리 하에 있는 파일이 포함된 로컬 디렉토리)에 있는 경우 이 분기에서 파일을 편집하고 있는 것입니다.
git symbolic-ref -q --short HEAD
현재 분기 이름이 필요한 스크립트에서 이것을 사용합니다. 현재 브랜치 이름이 될 HEAD에 대한 현재 짧은 기호 참조를 표시합니다.
git branch | grep -e "^*" | cut -d' ' -f 2
브랜치 이름만 표시
git branch
현재 브랜치 이름만 표시합니다.
git 분기는 모든 분기를 표시하고 현재 분기를 별표로 강조 표시하지만 많은 분기로 작업할 때는 너무 번거로울 수 있습니다.
현재 있는 분기만 표시하려면 다음을 사용하십시오.
git rev-parse --abbrev-ref HEAD
좋은 ol' awk를 사용하여 Oliver Refalo 와 동일한 길이의 명령줄 솔루션을 찾았습니다.
git branch | awk '/^\*/{print $2}'
awk
는 이를 "정규식과 일치하는 행 {}
의 작업 수행"으로 읽습니다. 기본적으로 공백으로 구분된 필드를 가정하므로 두 번째 필드를 인쇄합니다. 분기가 있는 줄에만 *가 있다고 가정할 수 있으면 ^를 삭제할 수 있습니다. 아, 배쉬 골프!
git 상태에 대한 덜 시끄러운 버전이 트릭을 수행합니다.
git status -bsuno
출력한다
## branch-name
#!/bin/bash function git.branch { br=`git branch | grep "*"` echo ${br/* /} } git.branch
현재 분기의 이름을 알려주는 git-aware shell 프롬프트를 사용하지 않는 이유는 무엇입니까? git status
도 도움이 됩니다.
__git_ps1
도우미 함수에 contrib/
git-prompt.sh 가 수행하는 방식(git 버전 2.3.0):
먼저 rebase 진행 중이 감지되면 특별한 경우가 있습니다. Git은 rebase 과정에서 unnamed branch(detached HEAD)를 사용하여 atomic하게 만들고 원래 브랜치는 다른 곳에 저장합니다.
.git/HEAD
파일이 심볼릭 링크인 경우(Git의 고대 역사에서 매우 드문 경우임) 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 ...
를 사용하여 현재 커밋을 사람이 읽을 수 있는 형식으로 작성합니다.
도움이 되기를 바랍니다.
죄송합니다. 이것은 또 다른 명령줄 답변이지만 이 질문을 찾았을 때 찾던 내용이며 이러한 답변 중 많은 부분이 도움이 되었습니다. 내 솔루션은 다음 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 bash를 사용할 수 있습니다.
git status -b
그것은 당신이 어느 지점에 있는지 알려줄 것입니다. 유용한 명령 중 일부는 다음과 같습니다.
-s
--short 짧은 형식으로 출력을 제공합니다.
-b --branch 짧은 형식으로도 분기 및 추적 정보를 표시합니다.
--porcelain[=] 스크립트에 대해 구문 분석하기 쉬운 형식으로 출력을 제공합니다. 이는 짧은 출력과 유사하지만 Git 버전 전체에서 사용자 구성에 관계없이 안정적으로 유지됩니다. 자세한 내용은 아래를 참조하세요.
version 매개변수는 형식 버전을 지정하는 데 사용됩니다. 이것은 선택 사항이며 기본적으로 원래 버전 v1 형식입니다.
--long 출력을 긴 형식으로 제공합니다. 이것이 기본값입니다.
-v --verbose 변경된 파일 이름 외에도 커밋되도록 준비된 텍스트 변경 사항도 표시합니다(예: git diff --cached의 출력). -v가 두 번 지정되면 아직 준비되지 않은 작업 트리의 변경 사항도 표시합니다(예: git diff의 출력).
시간이 지남에 따라 분기 목록이 정말 길어질 수 있습니다.
다른 솔루션 중 일부는 훌륭하지만 다음은 내가하는 일입니다 (Jacob의 답변에서 단순화).
git branch | grep \*
지금,
git status
작동하지만 로컬 변경 사항이 있는 경우 에만
git status
또한 변경 사항과 함께 분기 이름을 제공합니다.
예
>git status On branch master // <-- branch name here .....
이 두 명령 중 하나를 사용하는 것이 좋습니다.
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/##"
현재 분기 이름을 출력하는 git-cbr
( 현재 분기 )이라는 간단한 스크립트가 있습니다.
#!/bin/bash git branch | grep -e "^*"
이 스크립트를 사용자 지정 폴더( ~/.bin
)에 넣습니다. 폴더는 $PATH
있습니다.
이제 git repo에 있을 때 git cbr
을 입력하여 현재 브랜치 이름을 출력하기만 하면 됩니다.
$ git cbr * master
git
git-arg1
이라는 이름의 스크립트를 실행하려고 하기 때문에 작동합니다. 예를 들어 git branch
git-branch
등의 스크립트를 실행하려고 합니다.
다음 쉘 명령은 현재 있는 분기를 알려줍니다.
git branch | grep ^\*
분기를 알고 싶을 때마다 긴 명령을 입력하고 싶지 않고 Bash를 사용하는 경우 명령에 짧은 별칭을 지정하십시오(예: alias cb
).
alias cb='git branch | grep ^\*'
브랜치 마스터에 있고 프롬프트가 $
이면 * master
가 표시됩니다.
$ cb * master
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\]\$ "
분리된 헤드에 있을 때 분기 이름 또는 SHA1을 반환합니다.
git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD
이것은 @dmaestro12 답변의 짧은 버전이며 태그 지원이 없습니다.
분리된 HEAD 상태에서도 마지막 분기/태그를 체크아웃하려는 경우.
git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev
업데이트 awk가 있고 두렵지 않다면 이것은 더 좋습니다.
git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
나는 이것이 늦었다는 것을 알고 있지만 linux/mac에서는 터미널에서 다음을 사용할 수 있습니다.
git status | sed -n 1p
설명:
git status -> 작업 트리 상태를 가져옵니다.
sed -n 1p -> 상태 본문에서 첫 번째 줄을 가져옵니다.
위 명령에 대한 응답은 다음과 같습니다.
"On branch your_branch_name"
Mac을 사용하여 PS1
추가:
PS1='\W@\u >`[ -d .git ] && git branch | grep ^*|cut -d" " -f2`> $ '
위의 명령을 실행하기 전에:
해당 명령을 실행한 후:
.git
폴더가 있는지 여부를 확인하는 [-d .git]
때문에 오류가 표시되지 않으므로 걱정하지 마십시오.
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 - 커미터/저자 이메일
출처 : http:www.stackoverflow.com/questions/6245570/how-to-get-the-current-branch-name-in-git
명시적 키워드는 무엇을 의미합니까? (0) | 2021.10.09 |
---|---|
__str__과 __repr__의 차이점은 무엇입니까? (0) | 2021.10.09 |
"최소한의 놀라움"과 변경 가능한 기본 인수 (0) | 2021.10.09 |
scp를 사용하여 원격에서 로컬로 폴더를 어떻게 복사합니까? (0) | 2021.10.09 |
웹 양식 필드/입력 태그에서 브라우저 자동 완성을 어떻게 비활성화합니까? (0) | 2021.10.09 |