etc./StackOverFlow

왜 항상 `--set-upstream`을 수행해야 합니까?

청렴결백한 만능 재주꾼 2022. 1. 22. 07:11
반응형

질문자 :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_branchorigin/my_branch , 나는 당겨 할 것 origin/my_branchmy_branch ? 이것을 기본 동작으로 만들려면 어떻게 해야 합니까?



git branch --set-upstream 1 구문 기억에 의존하지 않는 단축키는 다음과 같습니다.

 git push -u origin my_branch

... 해당 분기를 처음 푸시할 때. 또는 현재 브랜치를 같은 이름의 브랜치로 푸시하려면(별칭에 유용함):

 git push -u origin HEAD

-u 한 번만 사용 git branch --set-upstream 과 동일한 방식으로 origin 지점과 지점 간의 연결을 설정합니다.

개인적으로, 당신의 브랜치와 리모트에 있는 브랜치 사이에 명시적으로 연결을 설정해야 하는 것은 좋은 일이라고 생각합니다. git pushgit 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

123

git 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

그리고 당신은 가도 좋다


jchavannes

git에는 다른 "업스트림" 리포지토리로 다른 분기를 푸시/풀링하는 멋진 기능이 있기 때문입니다. 동일한 분기에서 푸시 및 풀링을 위해 별도의 리포지토리를 사용할 수도 있습니다. 이것은 분산된 다단계 흐름을 생성할 수 있으며 Linux 커널과 같은 프로젝트에서 유용하다는 것을 알 수 있습니다. Git은 원래 해당 프로젝트에서 사용하도록 빌드되었습니다.

결과적으로 분기가 추적해야 하는 저장소에 대해 가정하지 않습니다.

반면에, 대부분의 사람들은 이런 방식으로 git을 사용하지 않으므로 기본 옵션에 대한 좋은 사례가 될 수 있습니다.

Git은 일반적으로 매우 낮은 수준이며 실망스러울 수 있습니다. 그러나 GUI가 있으며 쉘에서 여전히 사용하려는 경우 도우미 스크립트를 작성하는 것이 쉬울 것입니다.


Rolf

git push -u origin $(current_branch) 할 수도 있습니다.


ourmaninamsterdam

99%의 경우 업스트림을 같은 이름 의 브랜치로 설정하고 싶기 때문에 다음을 사용합니다(*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.c

legit 으로 재발견했습니다(OS X만 해당). 이제 분기할 때 사용하는 것은 다음 두 명령뿐입니다.

legit publish [<branch>] 지정된 분기를 원격에 게시합니다. (별칭: pub )

legit unpublish <branch> 원격에서 지정된 분기를 제거합니다. (별칭: unp )

SublimeGitlegit 지원을 제공하므로 전체 분기 루틴을 Ctrl-b를 누르는 것처럼 쉽게 만듭니다.


Benny K

출처 : http:www.stackoverflow.com/questions/6089294/why-do-i-need-to-do-set-upstream-all-the-time

반응형