힘내-현재 분기 바로 가기를 밀어


363

Git에게 현재 추적 분기를 원점으로 푸시하도록 지시하는 바로 가기가 있습니까?
참고 : 기본 푸시 동작을 변경할 수 있다는 것을 알고 있지만 기본 동작을 변경하지 않는 임시 솔루션을 찾고 있습니다.

예를 들어 feature/123-sandbox-tests내가 사용하려는 지점에 있다고 가정 합니다.

git push origin feature/123-sandbox-tests

지루합니다. 바로 가기를 찾고 있습니다.

git push origin current

여기서 git은 current가입니다 feature/123-sandbox-tests.


편집 : 버전 2.0부터 git의 기본 동작 이보다 직관적 인 동작으로 변경되었습니다. 자세한 내용은 이 SO 질문 을 참조하십시오.

편집 2 : ceztko의 답변 은 설정에 관계없이 현재 분기를 푸시 할 수 있으므로 가장 좋은 답변입니다.

답변:


702

git push설명서 에 따르면 :

git push origin HEAD
    A handy way to push the current branch to the same name on the remote.

그래서 당신이 필요로 생각합니다 git push origin HEAD. 또한 git push -u origin HEAD원점으로 아직 푸시하지 않은 경우 로컬 지점에서 업스트림 추적 정보를 설정하는 것이 유용 할 수 있습니다 .


11
다른 시스템은 다른 설정을 가질 수 있기 때문에 push.default를 단순 또는 현재로 설정하는 것보다이 방법을 선호합니다. git push현재 분기 만 푸시하는 데 익숙 할 수 있지만 다른 머신에서는 실수로 일치하는 모든 분기를 푸시 할 수 있습니다.
wisbucky

1
@wisbucky 나는을 포함하여 여러 개의 별칭을 가지고 co있으므로 ~/.gitconfigVM에서 파일 없이 코드를 가져 와서 체크 아웃하려고 시도 하면 즉시 알 수 있습니다. 푸시 기본값을로 변경하면 안전합니다 upstream.
데이먼

9
이 기능이에 작동하지 않는다는 점에 관심이 @있으며에 유효한 별칭으로 문서화되어 HEAD있습니다. (예 git push -u origin @)
void.pointer

197

다음 명령을 사용하여 현재 분기로 푸시 하도록 git구성 할 수 있습니다

git config --global push.default current

그럼 그냥

git push 

이렇게하면 코드가 현재 분기로 푸시됩니다.


push = refs/heads/current:refs/for/master/current.git / config의 '원격'섹션에 추가하는 것이 합리적 입니까? 즉, '현재'는 특별한 단어입니까? 아니면 "현재"라는 지점을 찾고 있습니까?
David Doria

6
@DavidDoria 'current'는 여기서 이름이 지정된 분기가 아닙니다.
마헤 쉬

git push -u origin feature_branch_name업스트림 / 추적을 설정하는 것이 가장 좋습니다! 최소한 원격 저장소를 사용하는 경우
Flo

40

분기가 지정되지 않은 "git push"의 기본 동작 에서 비슷한 질문을 살펴 봐야 합니다.

기본적으로 현재 브랜치를 실행하도록 기본 동작을 설정하는 방법에 대해 설명합니다 git push. 아마도 당신이 필요로하는 것은 :

git config --global push.default current

다른 옵션:

  • 아무것도 : 아무것도 밀지 마십시오
  • 매칭 : 일치하는 모든 분기를 푸시
  • 업스트림 / 트래킹 : 현재 브랜치를 트래킹중인 대상으로 푸시
  • 현재 : 현재 분기를 밀어

11

.bashrc 설정에서 이러한 별칭을 사용합니다.

alias gpb='git push origin `git rev-parse --abbrev-ref HEAD`'

명령에서 $gpb 에서 현재 분기 이름을 가져 와서 원점으로 푸시합니다.

다른 별명은 다음과 같습니다.

alias gst='git status'
alias gbr='git branch'
alias gca='git commit -am'
alias gco='git checkout'

8

그 가치에 대한 궁극적 인 지름길 :

.bash_profile경우 alias push="git push origin HEAD", 그래서 내가 입력 할 때마다 내가 push현재 분기로 밀고 있음을 알고 있습니다.


6

git 1.7.x를 사용하는 경우 다음 명령을 실행하여 원격 추적 분기를 설정할 수 있습니다.

git branch --set-upstream feature/123-sandbox-tests origin/feature/123-sandbox-tests

그런 다음 간단히 git push모든 변경 사항을 적용 할 수 있습니다 . 더 완전한 답변을 보려면 여기에서 비슷한 질문에 대한 허용 된 답변을 참조 하십시오.

push 명령을 사용하여 현재 분기 만 푸시하려는 경우 푸시 동작을 업스트림으로 변경할 수 있습니다.

git config --global push.default upstream

그러나이 경우 모든 추적 분기가 원산지로 푸시되지는 않습니까?
Elad

답변을 수정했습니다. 링크를 참조하십시오. 답변이 더 완성되었습니다.
Faruk Sahin

다시 말하지만, 문제는 지점을 추적하는 모든 지점이 그런 식으로 푸시되고 있다는 것입니다. 내 질문에 썼 듯이 지점은 처음에 추적 된 지점이므로 제안한대로 업스트림 지점을 설정하는 것이 중복 적이라고 생각합니다. 아니면 내가 틀렸어?
Elad

그런 다음 git push 동작을 변경하여 현재 분기 만 푸시하도록 git을 구성 할 수 있습니다. git config --global push.default upstream현재 동작 만 푸시하도록 푸시 동작을 설정합니다.
Faruk Sahin

5

가장 간단한 방법 : git push -u origin feature/123-sandbox-tests한 번만 실행하십시오 . 이렇게하면 지점에서 사용하는 방식이 향상되고 로컬 구성에서 업스트림 추적 정보가 설정됩니다. 그 후, 당신은 단지 할 수 있습니다git push 추적 된 분기를 업스트림 리모컨으로 푸시 .

branch.<branch name>.merge원격 브랜치 이름 (경우에 따라 로컬 이름과 동일)으로 설정하고 선택적 branch.<branch name>.remote으로 푸시하려는 원격의 이름 (기본값은 원점) 으로 설정하여 구성에서 직접 수행 할 수도 있습니다. 구성을 살펴보면에 대한 집합 중 하나가 이미있을 가능성이 높으므로 master해당 예를 따를 수 있습니다.

마지막으로 push.default설정 을 고려해야합니다 . 기본값은 "일치"로, 바람직하지 않은 결과를 초래할 수 있습니다. 내가 아는 대부분의 사람들은 "업스트림"이 더 직관적이라고 생각합니다.

각 설정에 대한 자세한 내용은 git-config 매뉴얼 페이지를 참조하십시오 .

두 번째 생각으로, 당신의 질문을 다시 읽으면서, 나는 당신이이 모든 것을 알고 있다고 생각합니다. 나는 당신이 실제로 찾고있는 것이 존재하지 않는다고 생각합니다. bash 함수는 (예상치 않은) 어떻습니까?

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}

1

ceztko의 답변을 통해 나는 인생을 더 쉽게하기 위해이 작은 도우미 기능을 작성했습니다.

function gpu()
{
    if git rev-parse --abbrev-ref --symbolic-full-name @{u} > /dev/null 2>&1; then
        git push origin HEAD
    else
        git push -u origin HEAD
    fi
}

현재 분기를 원점으로 푸시하고 아직 설정되지 않은 경우 원격 추적 분기를 설정합니다.

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