git은 현재 브랜치를 어떻게 가져올 수 있습니까?


81

어떤 분기를 지정하지 않고 이것을 설정하는 구성 방법이 있습니까?

답변:


84

Git은 이미 현재 분기 만 가져옵니다. 분기를 추적 분기로 설정 한 경우 원격 분기를 지정할 필요가 없습니다. git branch --set-upstream localbranch reponame/remotebranch추적 관계를 설정합니다. 그런 다음 발행 git pull [--rebase]하면 해당 분기 만 업데이트됩니다.

물론 모든 원격 추적 분기와 원격에 대한 모든 참조가 업데이트되지만 로컬 추적 분기 만 수정됩니다.

이 일반적인 작업의 입력을 줄이는 데 유용한 Bash 별칭 :

# Add an alias to pulling latest git changes into your same branch
alias pullhead='git pull origin $(git rev-parse --abbrev-ref HEAD)'

동일한 기능을 수행하는 Powershell 기능 :

Function pullhead {
    $cur_head="$(git rev-parse --abbrev-ref HEAD)"
    & git pull origin ${cur_head}
}

"git push"(기본값)가 모든 브랜치 (동일한 원격 이름으로)를 푸시하려고하기 때문에 약간 이상 할 수 있습니다.
Alessandro De Simone 2013 년

2
@AlessandroDs 글쎄, 나는 그 이유 때문에 push.default를 업스트림으로 설정했습니다. push.default의 새로운 기본값은 "simple"로 다시 현재 브랜치를 업데이트하므로 pull이 수행하는 작업과 훨씬 더 유사합니다.
Seth Robertson

1
@Danjah : 모든 변경 사항은 원격 저장소에서 가져옵니다 (원격 추적 분기, 예 : origin / master origin / foo 등). 업스트림이 정의 된 로컬 브랜치로 체크 아웃 된 경우 해당 로컬 브랜치 만 업데이트됩니다. 업스트림없이 로컬 브랜치로 체크 아웃 한 경우 추가 정보를 지정하거나 업스트림을 설정해야합니다. 로컬이 아닌 체크 아웃을 수정하지 말고 로컬 브랜치를 만든 다음 계속하십시오. 전송하는 것을 줄이고 싶다면 로컬 git config에서 리모컨의 refspec을 업데이트 할 수 있습니다.
Seth Robertson 2014

1
모든 참조를 업데이트하지 않는 기본 제공 방법이 현재 분기 만 가져 오나요?
Aditya MP

1
@aditya menon : 쉽지 않습니다. 원하는 특정 참조 (분기, 태그 등) 만 가져 오려면 참조 사양 (예 : git config remote.origin.fetch)을 업데이트해야합니다. 더 구체적인 예는 stackoverflow.com/questions/15507264/… 를 참조하십시오 .
Seth Robertson

61

나는 이렇게했다.

git pull origin "$(git branch | grep -E '^\* ' | sed 's/^\* //g')"

또는

git pull origin $(git rev-parse --abbrev-ref HEAD)

에서 현재 분기를 추출하고 git branch원격 원본에서 해당 분기를 가져옵니다.

Seth Robertson이 말했듯이 인수가 주어지지 않으면 현재 분기 만 수정되지만 모든 원격 분기는 가져옵니다. 모든 원격 지점을 가져오고 싶지 않기 때문에 이렇게했습니다.


3
git branch실제로 분기 정보를 구문 분석해서는 안됩니다. 이 정보는 git rev-parse다음 명령을 통해 사용할 수 있습니다 .git pull origin $(git rev-parse --abbrev-ref HEAD)
Paul DelRe

@ayke 내가 Paul DelRe 답변을 추가 한대로 작동했습니다. 두 분 모두 괜찮으 셨으면 좋겠습니다
Timo Huovinen

1
궁금한 점이 있습니다. 간단한 "git pull"(내가 당기고 싶은 브랜치를 확인한 후)와 귀하의 제안의 차이점은 무엇입니까? 당신의 명령 대체 결과 git pull origin <current-branch>어쨌든 기본값은 무엇입니까? 다른 원격 분기 (예 : origin / other-branch 등)가 업데이트되지 않아 트래픽이 감소한다는 것을 암시하고 있습니까?
피터 - 분석 재개 모니카

나는이 나이 전에 대답했다. 나는 더 이상 정말로 모른다. 당신은 아마 ... 허용 대답에 가야한다
ayke

@ PeterA.Schneider 입력 만하면 다음 git pull과 같은 메시지가 표시 될 수 있습니다 There is no tracking information for the current branch. Please specify which branch you want to merge with.. 그런 다음 항상 입력하게됩니다 git pull origin my-feature-branch. 추적 정보가없는 상황이 어떻게 도래하는지 정말 알고 싶습니다.
Alfe

18

최신 정보

내가 추가 한 이전 답변이 더 이상 작동하지 않습니다. : /. 그러나 내가 배치 한 PUSH 버전에 대해 약간의 찬성 투표를받은 후에는이 답변이 실제로 검색 엔진에서 여기로 오는 누군가를 돕고 있음을 의미 하므로이 답변을 유지하겠습니다.

새 버전의 git에 대해 다음을 시도하십시오.

$ git config --global push.default current

9
나는 pull.default가 존재한다고 믿지 않는다. git-scm 또는 kernel.org를 참조하십시오 .
Mort

2
예. 리눅스에서 git 2.3.4는 위의 pull.default=current. git clone기본적으로 내 도 추가 remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*되었지만 꽤 표준입니다.
모트

6
pull.default구성 변수 가 없습니다 . 그것을 git 구성에 넣으면 아무것도하지 않습니다.
David Sanders

5
질문은 git pull에 관한 것이며 답변에는 많은 upvotes가있는 git push가 포함되어 있습니다. @BrunoCasali 오해의 소지가 있습니다. 답변을 수정하고 효과가 있다면 삭제 한 이유는 무엇입니까? 답변이 잘못되었다는 사실을 알게 된 경우 관련없는 정보로 유지하는 대신 삭제하여 찬성 투표를 유지하십시오.
TJ

5

예,에서 변경할 수있는 구성이 있습니다 .gitconfig. 예 :

[push]
  default = current

현재 분기를 푸시하여 수신 측에서 동일한 이름으로 분기를 업데이트합니다.

확인 :

git config --global --get push.default

참조 : git-config .


3

--set-upstream플래그는 사용되지 않으며 제거됩니다. 따라서 --track또는--set-upstream-to

예 :이 지점에 대한 추적 정보를 설정하려면 다음과 같이 할 수 있습니다.

git branch --set-upstream-to=<remote>/<branch> develop

더 이상 사용되지 않을 수 있지만 (소스?) --set-upstream-to=추적 정보에 대해 알지 못하는 경우 git에서 계속 언급합니다. 지원 중단에 대한 언급이 없습니다.
Adrien

@AdrienGiboire 다음은 지원 중단에 대한 몇 가지 정보입니다. jira.atlassian.com/browse/SRCTREEWIN-588
biniam

0

다음은 원격이 있다고 가정하지 않고 origin분기가 원격을 추적하지 않는 경우 처리 하는 git 별칭입니다 .

pullh = "!f() { set -e; set -o pipefail; arr=($(git rev-parse --abbrev-ref @{u} | sed 's/\\//\\n/')); git pull ${arr[0]} ${arr[1]}; }; f"

(면책 조항 : 저는 bash 초보자이며 위의 내용을 많이 단순화 할 수 있습니다.)

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