내가 원하는 git push origin
로컬에서 생성 된 분기를 처음으로 푸시 할 때 업스트림 참조를 자동으로 설정하고 .
에 대해 알고 git push -u
있지만 -u
이전에 사용했는지 또는 업스트림 참조를 설정 했는지 여부에 대해 생각하고 싶지 않습니다 . 즉, 업스트림이 아직없는 브랜치의 푸시에 git push
자동으로 영향을 미치고 싶습니다 git push -u
.
이것이 가능한가? 별칭이나 유틸리티 스크립트가 필요한 경우 괜찮습니다.
답변
을 git config
사용하여 구성 할 수 있습니다 git config --global push.default current
.
문서 : https://git-scm.com/docs/git-config/#Documentation/git-config.txt-pushdefault
답변
git config를 사용하여 이것이 가능하지 않다고 생각하므로 다음은 bash에서 수행 할 수있는 작업입니다.
[[ $(git config "branch.$(git rev-parse --abbrev-ref HEAD).merge") = '' ]] && git push -u || git push
현재 분기에 원격 추적 분기가 있으면 호출하고 git push
그렇지 않으면 호출합니다. git push -u
답변
참고 : 새 기본 푸시 정책 ” simple
“ 이 업스트림 브랜치를 갖는 브랜치에 의존 한다는 사실은 다음을 의미합니다.
업스트림 브랜치를 설정하는 것은 숨겨진 자동화 된 단계가 아니라 자발적인 단계로 간주됩니다.
”
git push [$there]
“이 무엇을 푸시할지 말하지 않으면 지금까지 전통적인 “일치”의미를 사용했습니다 (이미 같은 이름의 분기가있는 한 모든 분기가 원격으로 전송되었습니다).현재 분기가 해당 원격 분기와 통합되도록 설정된 경우에만
simple
현재 분기를 동일한 이름의 분기로 푸시 하는 ” “의미 체계를 사용합니다 . 이를 변경할 수
있는 사용자 기본 설정 구성 변수 ” “이 (가) 있습니다.push.default
따라서 Mechanicalfish 의 대답을 바탕으로 오른쪽 큰 따옴표 ( "
)를 이스케이프 ( \"
)로 사용하여 별칭을 정의 할 수 있습니다 .
git config alias.pu "![[ $(git config \"branch.$(git rev-parse --abbrev-ref HEAD).merge\") = '' ]] && git push -u || git push"
git pu origin
Sc0ttyD 는 주석 에서 다음 별칭을 제안합니다 .
alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'
여러 줄 :
alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] &&
git push -u origin $(git symbolic-ref --short HEAD) ||
git push'
답변
나는 같은 문제가 있었다. 이 별칭 (.gitconfig)을 찾았습니다.
[alias]
track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"
사용량 : git track
새 지점 당 한 번 (현재 체크 아웃). 그런 다음 평소대로 누르십시오 🙂
답변
@VonC 및 @Frexuz의 답변은 도움이되지만 두 솔루션 모두 저에게 오류를 생성합니다. 두 가지 답변을 모두 사용하여 저에게 적합한 것을 조합했습니다.
[alias]
pu = ![[ $(git config "branch.$(git symbolic-ref --short HEAD).merge") = '' ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push
이로 인해 업스트림 (속성 )이 정의 되었는지 여부에 따라 git push -u origin $BRANCHNAME
또는 을 실행합니다 .git push
branch.$BRANCHNAME.merge
명령 줄에이 별칭을 입력하려면 이스케이프 코드가 필요하므로 편집기를 사용하여 올바른 파일 ( $HOME/.gitconfig
(global), .git/config
(local) 또는 /etc/gitconfig
(system)) 에 삽입하는 것이 가장 쉽습니다.
답변
이 간단한 Bash 스크립트를 사용하여이 문제를 해결했습니다. 기존 브랜치에서는 작동하지 않지만이 기능으로 모든 브랜치를 생성하면 항상 업스트림 브랜치가 자동으로 설정됩니다.
function con { git checkout -b $1 && git push --set-upstream origin $1; }
$ 1은 다음 con
과 같이 전달하는 첫 번째 인수를 나타냅니다 .
git checkout -b my-new-branch && git push -u my-new-branch
… 이렇게하면 :
con my-new-branch
답변
짧은 답변
실제로 명시적이고 -u
필요할 때 옵션을 사용하고 싶지만 전체를 입력하고 싶지 않은 경우 :
git push -u origin foo
그런 다음 다음 별칭을 사용할 수 있습니다.
[alias]
push-u = !git push -u origin $(git symbolic-ref --short HEAD)
다음을 입력하면됩니다.
git push-u
긴 대답
일반적으로 -u
(의 약어)에 대한 필요성 --set-upstream
은 방금 새 로컬 브랜치를 생성하고 커밋하고이를 업스트림으로 푸시하려는 경우입니다. 원격 저장소에는 아직 새 브랜치가 없으므로 커밋을 푸시하기 전에 git에게 원격 브랜치를 만들고 추적하도록 지시해야합니다. 이것은 브랜치에 대한 첫 번째 푸시에만 필요합니다. 다음은 일반적인 시나리오입니다.
git checkout -b foo # Create local branch
git commit -m "Foo" # Create local commit
git push -u origin foo # Create and track remote branch, and push commit
git commit -m "Bar" # Create local commit
git push # Push commit
개인적으로 저는 git push -u
원격 브랜치를 만들 때 명시 적이 필요하다는 점을 좋아합니다 . 완전히 새로운 브랜치를 세상에 공유하는 매우 중요한 작업입니다.
그러나 나는 명시 적으로 작성해야하는 것이 싫다 git push -u origin foo
. 입력하는 것이 고통 스러울뿐만 아니라 더 중요한 것은 오류가 발생하기 쉽다는 것입니다! 지점 이름을 입력 할 때 실수하기 쉽고 새 원격 지점은 로컬 지점과 동일한 이름을 갖지 않습니다! 대부분의 경우 실제로 업스트림 저장소가origin
이고 업스트림 분기는 로컬 분기와 동일한 이름을 갖기 .
따라서 Mark가 제공 한.gitconfig
우수한 답변 의 하위 집합 인 my에서 다음 별칭을 사용하고 있습니다 .
[alias]
push-u = !git push -u origin $(git symbolic-ref --short HEAD)
이제 다음을 수행 할 수 있습니다. 이는 여전히 명시 적이지만 오류가 덜 발생합니다.
git checkout -b foo # Create local branch
git commit -m "Foo" # Create local commit
git push-u # Create and track remote branch, and push commit
git commit -m "Bar" # Create local commit
git push # Push commit