질문자 :Ram Rachum
Git에서 새 분기를 만듭니다.
git branch my_branch
밀어:
git push origin my_branch
이제 누군가가 서버에서 일부 변경 사항을 적용했고 내가 origin/my_branch
. 그렇다:
git pull
하지만 나는 얻는다 :
You asked me to pull without telling me which branch you want to merge with, and 'branch.my_branch.merge' in your configuration file does not tell me, either. Please specify which branch you want to use on the command line and try again (eg 'git pull <repository> <refspec>'). See git-pull(1) for details. If you often merge with the same branch, you may want to use something like the following in your configuration file: [branch "my_branch"] remote = <nickname> merge = <remote-ref> [remote "<nickname>"] url = <url> fetch = <refspec> See git-config(1) for details.
나는 내가 그것을 작동시킬 수 있다는 것을 배웠다 :
git branch --set-upstream my_branch origin/my_branch
하지만 내가 만드는 모든 분기에 대해 이 작업을 수행해야 하는 이유는 무엇입니까? 내가 밀어 경우 분명하지 않다 my_branch
에 origin/my_branch
, 나는 당겨 할 것 origin/my_branch
에 my_branch
? 이것을 기본 동작으로 만들려면 어떻게 해야 합니까?
git branch --set-upstream
1 구문 기억에 의존하지 않는 단축키는 다음과 같습니다.
git push -u origin my_branch
... 해당 분기를 처음 푸시할 때. 또는 현재 브랜치를 같은 이름의 브랜치로 푸시하려면(별칭에 유용함):
git push -u origin HEAD
-u
한 번만 사용 git branch --set-upstream
과 동일한 방식으로 origin
지점과 지점 간의 연결을 설정합니다.
개인적으로, 당신의 브랜치와 리모트에 있는 브랜치 사이에 명시적으로 연결을 설정해야 하는 것은 좋은 일이라고 생각합니다. git push
와 git pull
대한 규칙이 다르다는 것은 부끄러운 일입니다.
1 어리석게 들릴지 모르지만 현재 분기를 지정하는 것을 자주 잊습니다. 기본값이 아니라고 가정하고 결과는 가장 혼란스럽습니다.
2012년 10월 11일 업데이트 : 분명히 내가 쉽게 틀리는 것을 발견한 유일한 사람이 아닙니다! git 1.8.0 my_branch
브랜치에 있는 경우 다음과 같이 사용할 수 있는 git branch --set-upstream-to
소개한다는 VonC 덕분입니다.
git branch --set-upstream-to origin/my_branch
... 또는 짧은 옵션으로:
git branch -u origin/my_branch
이 변경 사항과 그 이유는 git 1.8.0, 릴리스 후보 1의 릴리스 정보에 설명되어 있습니다.
git branch --set-upstream origin/master
라고 말하고 싶었지만, 이는 Git에게 origin/master
를 정렬하도록 지시하는데, 이는 사용자가 의미한 것 같지 않습니다. 이 옵션은 더 이상 사용되지 않습니다. 대신 새로운 --set-upstream-to
(짧고 달콤한 -u
) 옵션을 사용하십시오.
Mark Longair적은 수의 타이핑으로 이를 수행할 수 있습니다. 먼저 푸시 작동 방식을 변경합니다.
git config --global push.default current
origin my_branch
부분을 유추하므로 다음을 수행할 수 있습니다.
git push -u
동일한 이름으로 원격 분기를 만들고 추적합니다.
Zamith이것은 내가 가장 많이 사용 하는 Fuck 입니다.
$ git push fatal: The current branch master has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin master $ fuck git push --set-upstream origin master [enter/↑/↓/ctrl+c] Counting objects: 9, done. ...
또한 터미널에 욕설을 입력하는 것도 재미있습니다.
Tamlyn당신은 단순히
git checkout -b my-branch origin/whatever
처음에는. branch.autosetupmerge
또는 branch.autosetuprebase
(내가 가장 좋아하는 것)를 always
(기본값은 true
)으로 설정하면 my-branch
는 자동으로 origin/whatever
추적합니다.
git help config
참조하십시오.
cdunn2001두 가지 방법으로 더 간단하게 업스트림을 설정할 수 있습니다. 먼저 분기를 만들 때:
git branch -u origin/my-branch
또는 분기를 만든 후 이 명령을 사용할 수 있습니다.
git push -u origin my-branch
또한 단일 명령으로 분기, 체크아웃 및 업스트림을 설정할 수 있습니다.
git checkout -b my-branch -t origin/my-branch
개인적으로 선호하는 것은 2단계 명령으로 이 작업을 수행하는 것입니다.
git checkout -b my-branch git push -u origin my-branch
Tzen당신이 사용할 수있는:
git config --global branch.autosetupmerge always
새 분기를 만들거나 체크아웃할 때마다 업스트림 분기를 연결합니다.
https://felipec.wordpress.com/2013/09/01/advanced-git-concepts-the-upstream-tracking-branch/ 참조
branch.autosetuprebase
와 함께 작동합니다. 만약 당신이 더 리베이스 중심의 워크플로를 따른다면, 당신이 무엇을 하고 있는지 알지 못하면 이것을 사용하지 마십시오. 풀 동작이 리베이스로 기본 설정되어 이상한 결과를 초래할 수 있기 때문입니다.
Daniel그건 그렇고, 현재 분기를 같은 이름의 원격으로 푸시하는 바로 가기:
$ git push -u origin HEAD
djanowski개인적으로 bash에서 다음 별칭을 사용합니다.
~/.gitconfig 파일에서
[alias] pushup = "!git push --set-upstream origin $(git symbolic-ref --short HEAD)"
~/.bashrc 또는 ~/.zshrc 파일
alias gpo="git pushup" alias gpof="gpo -f" alias gf="git fetch" alias gp="git pull"
Amrit Shrestha아래가 작동하지 않는 경우:
git config --global push.default current
프로젝트에 로컬 git 구성이 있을 수 있으므로 프로젝트의 로컬 구성도 업데이트해야 합니다.
git config --local push.default current
youngrrrr원격(예: origin/somebranch)에 이미 존재하지만 아직 로컬로 체크아웃하지 않은 분기를 추적하려는 경우 다음을 수행할 수 있습니다.
$ git checkout --track origin/somebranch
참고: '-t'는 '--track' 옵션의 단축 버전입니다.
이것은 박쥐에서 바로 동일한 연결을 설정합니다.
mattacular또한 git pull에게 가져올 원격 분기를 명시적으로 지정할 수 있습니다(오류 메시지에 언급된 대로).
git pull <remote-name> <remote-branch>
그러나 이것에 주의하십시오 . 다른 브랜치에 있고 명시적 풀을 수행하면 풀한 refspec이 현재 있는 브랜치에 병합됩니다!
mtbkrdave
git branch --set-upstream-to=origin/master<branch_name>
user3693546매번 Git의 제안을 복사/붙여넣기하는 대신 이 Git 별칭을 사용합니다. https://gist.github.com/ekilah/88a880c84a50b73bd306
아래에 복사한 소스( ~/.gitconfig
파일에 추가):
[alias] pushup = "!gitbranchname() { git symbolic-ref --short HEAD; }; gitpushupstream() { git push --set-upstream origin `gitbranchname`; }; gitpushupstream"
manroe지나치게 장황한 구문 없이 이것을 처리할 수 있는 정말 좋은 별칭을 설정할 수 있습니다.
~/.gitconfig
에 다음 별칭이 있습니다.
po = "!git push -u origin \"$(git rev-parse --abbrev-ref HEAD)\""
새 브랜치를 커밋한 후 다음 명령을 입력하기만 하면 새 브랜치를 푸시할 수 있습니다.
git po
123git pull
과 함께 작동하는 별칭을 찾는 사람들을 위해 다음을 사용합니다.
alias up="git branch | awk '/^\\* / { print \$2 }' | xargs -I {} git branch --set-upstream-to=origin/{} {}"
이제 다음을 얻을 때마다:
$ git pull There is no tracking information for the current branch. ...
그냥 실행:
$ up Branch my_branch set up to track remote branch my_branch from origin. $ git pull
그리고 당신은 가도 좋다
jchavannesgit에는 다른 "업스트림" 리포지토리로 다른 분기를 푸시/풀링하는 멋진 기능이 있기 때문입니다. 동일한 분기에서 푸시 및 풀링을 위해 별도의 리포지토리를 사용할 수도 있습니다. 이것은 분산된 다단계 흐름을 생성할 수 있으며 Linux 커널과 같은 프로젝트에서 유용하다는 것을 알 수 있습니다. Git은 원래 해당 프로젝트에서 사용하도록 빌드되었습니다.
결과적으로 분기가 추적해야 하는 저장소에 대해 가정하지 않습니다.
반면에, 대부분의 사람들은 이런 방식으로 git을 사용하지 않으므로 기본 옵션에 대한 좋은 사례가 될 수 있습니다.
Git은 일반적으로 매우 낮은 수준이며 실망스러울 수 있습니다. 그러나 GUI가 있으며 쉘에서 여전히 사용하려는 경우 도우미 스크립트를 작성하는 것이 쉬울 것입니다.
Rolfgit push -u origin $(current_branch)
할 수도 있습니다.
ourmaninamsterdam99%의 경우 업스트림을 같은 이름 의 브랜치로 설정하고 싶기 때문에 다음을 사용합니다(*nix 또는 Git Bash에서).
git branch --set-upstream-to=origin/`git branch --show-current`
분기에 구애받지 않기 때문에 좋습니다. 하위 명령 git branch --show-current
는 현재 분기 이름을 인쇄하거나 분리된 경우 아무 것도 인쇄하지 않습니다.
참고 사항 git push -u
사용할 수 있도록 구성을 설정했으므로 거의 이 작업을 수행할 필요가 없습니다. 하지만 여전히 가끔 하고, 보통 원격에 있는 모든 항목으로 로컬 변경 사항을 재설정하기로 결정할 때입니다. 그 순간 이전에 -u 없이 푸시했음을 깨달았습니다. 따라서 일반적으로 업스트림을 설정한 후 실행할 다음 명령은 원격 분기로 재설정하는 것입니다.
git reset --hard @{u}
이는 또한 분기 불가지론적으로 발생합니다. (아마도 나는 내 지점 이름을 입력하는 것을 정말 싫어합니다.)
TTT우리는 phabricator를 사용하고 git을 사용하여 푸시하지 않습니다. Linux/mac에서 작동하는 bash 별칭을 만들어야 했습니다.
vim ~/.bash_aliases new_branch() { git checkout -b "$1" git branch --set-upstream-to=origin/master "$1" }
저장
source ~/.bash_aliases new_branch test #instead of git checkout -b test git pull
om471987다음은 모든 푸시에 대해 실행하기에 안전하고 첫 번째 푸시에 대해 업스트림을 설정한 다음 그 이후에 일반 푸시를 수행하는 사이를 자동으로 전환하는 git push에 대한 bash 별칭입니다.
alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'
원본 게시물
Loren내가 원했던 것은 다음과 같은 일을 하는 것뿐이었습니다.
git checkout -b my-branch git commit -a -m "my commit" git push
더 나은 솔루션을 찾지 못했기 때문에 ~/.bashrc
에 bash 별칭을 만들었습니다.
alias push="git push -u origin HEAD"
이제 push
명령을 수행하면 작업이 수행됩니다(이 별칭을 pushup
과 같은 다른 이름 ~/.gitconfig
에도 추가할 수 있음)
Maxwell s.clegit
으로 재발견했습니다(OS X만 해당). 이제 분기할 때 사용하는 것은 다음 두 명령뿐입니다.
legit publish [<branch>]
지정된 분기를 원격에 게시합니다. (별칭: pub
)
legit unpublish <branch>
원격에서 지정된 분기를 제거합니다. (별칭: unp
)
SublimeGit 은 legit
지원을 제공하므로 전체 분기 루틴을 Ctrl-b를 누르는 것처럼 쉽게 만듭니다.
Benny K출처 : http:www.stackoverflow.com/questions/6089294/why-do-i-need-to-do-set-upstream-all-the-time