Programing

“u”는 정확히 무엇을합니까?

lottogame 2020. 3. 20. 08:14
반응형

“u”는 정확히 무엇을합니까? “git push -u origin master”대“git push origin master”


나는 그것을 이해하려는 최선의 시도에도 불구하고 git을 사용하는 것이 끔찍합니다.

에서 kernel.org 에 대한 git push:

-유

-업스트림

최신이거나 성공적으로 푸시 된 모든 브랜치에 대해 인수가없는 git-pull (1) 및 기타 명령에서 사용하는 업스트림 (추적) 참조를 추가하십시오. 자세한 내용 branch.<name>.merge은 git-config (1)를 참조하십시오 .

여기 branch.<name>.merge에서 git config:

branch.<name>.merge

branch.<name>.remote지정된 분기의 업스트림 분기를와 함께 정의합니다 . git fetch / git pull에게 병합 할 분기를 알려주고 git push에도 영향을 줄 수 있습니다 (push.default 참조). branch에있을 때 <name>, git fetch에게 FETCH_HEAD에서 병합되도록 표시 될 기본 참조 스펙을 알려줍니다. 이 값은 참조 스펙의 원격 부분과 같이 처리되며로 지정된 원격에서 가져온 참조와 일치해야합니다 "branch.<name>.remote". 병합 정보는 병합 풀의 기본 분기를 조회하기 위해 git pull (처음에는 git fetch를 호출 함)에 의해 사용됩니다. 이 옵션이 없으면 git pull은 기본적으로 가져온 첫 번째 refspec을 병합합니다. 문어 병합을 얻으려면 여러 값을 지정하십시오. <name>로컬 리포지토리의 다른 분기에서 병합되도록 git pull을 설정하려는 경우branch.<name>.merge원하는 분기로 이동하고 특수 설정을 사용하십시오. 에 대한 (기간) branch.<name>.remote.

github으로 원격 저장소를 성공적으로 설정했으며 첫 번째 커밋을 성공적으로 푸시했습니다.

git push -u origin master

그런 다음 무의식적으로 두 번째 커밋을 다음을 사용하여 원격 저장소에 푸시했습니다.

git commit -m '[...]'

그러나 origin에서에서 다시 푸시해야한다고 잘못 생각하여 master실행했습니다.

# note: no -u
git push origin master

그게 무슨 짓이야? 전혀 영향을 미치지 않는 것 같습니다. "취소"했습니까 git push -u origin master?


핵심은 "인수가없는 git-pull"입니다. git pull소스 원격 또는 브랜치를 지정하지 않고 브랜치에서 작업을 수행하면 git은 branch.<name>.merge설정을보고 어디에서 가져올 지 알 수 있습니다. git push -u이 정보를 추진하려는 지점에 설정합니다.

차이점을 확인하려면 새로운 빈 분기를 사용하십시오.

$ git checkout -b test

먼저, 우리는 -u:

$ git push origin test
$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.test.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 (e.g. '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 "test"]
    remote = <nickname>
    merge = <remote-ref>

    [remote "<nickname>"]
    url = <url>
    fetch = <refspec>

See git-config(1) for details.

이제 우리가 추가하면 -u:

$ git push -u origin test
Branch test set up to track remote branch test from origin.
Everything up-to-date
$ git pull
Already up-to-date.

git pull원격 또는 지점을 지정하지 않고 예상대로 작동 하도록 추적 정보가 설정되었습니다 .

업데이트 : 보너스 팁 :

  • Mark가 주석에서 언급했듯이이 git pull설정 외에도 기본 동작 인에 영향을줍니다 git push. -u추적하려는 원격 브랜치를 캡처 하는 습관을들이는 경우 push.default구성 값을로 설정하는 것이 좋습니다 upstream.
  • git push -u <remote> HEAD현재 지점을 같은 이름의 지점으로 푸시합니다 <remote>(그리고 추적을 설정하여 git push그 후에 할 수 있습니다 ).

git push -u origin master

와 같다:

git push origin master ; git branch --set-upstream master origin/master

당신이 잊어 버린 경우 마지막 진술을하십시오 -u!

또는 당신은 그것을 강요 할 수 있습니다 :

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

존재하지 않는 지점을 입력했거나 입력하지 않은 경우와 같이 실수를 선택하면 명령이 수행됩니다 git remote add.


더 간단한 용어로 :

기술적으로이 -u플래그는 푸시하려는 업스트림 서버에 추적 참조를 추가합니다.

여기서 중요한 것은 git pull더 이상 인수를 제공하지 않고도 할 수 있다는 것 입니다. 예를 들어, 일단을 수행하면 git push -u origin master나중에 호출 할 수 git pull있으며 git은 실제로 의미한다는 것을 알게됩니다 git pull origin master.

그렇지 않으면 전체 명령을 입력해야합니다.


Github를 밀고 당기는 데 필요한 모든 git bash 명령 :

git status 
git pull
git add filefullpath

git commit -m "comments for checkin file" 
git push origin branch/master
git remote -v 
git log -2 

파일을 편집하려면 다음을 수행하십시오.

edit filename.* 

모든 지점과 커밋을 보려면 :

git show-branch

참고 : https://stackoverflow.com/questions/5697750/what-exactly-does-the-u-do-git-push-u-origin-master-vs-git-push-origin-ma

반응형