나는 새롭고 git
연습 중입니다. 로컬 지점을 만들었지 만 지점을 만들 때 git push
리포지토리에 업로드되지 않은 것을 보았습니다 . 나는 실제로해야했다 : git push -u origin --all
.
왜 이런거야? 지사가 기본적으로 새로운 변경 사항을 적용하지 않습니까? 두 번째 명령을 실행해야하는 이유는 무엇입니까?
나는 새롭고 git
연습 중입니다. 로컬 지점을 만들었지 만 지점을 만들 때 git push
리포지토리에 업로드되지 않은 것을 보았습니다 . 나는 실제로해야했다 : git push -u origin --all
.
왜 이런거야? 지사가 기본적으로 새로운 변경 사항을 적용하지 않습니까? 두 번째 명령을 실행해야하는 이유는 무엇입니까?
답변:
실제 이유는 새 리포지토리 (git init)에 분기가 없습니다 (아니오 master
, 분기가 전혀 없음 , 분기 없음)
따라서 처음으로 빈 업스트림 리포지토리 (일반적으로 베어 리포지토리) 로 푸시 할 때 해당 업스트림 리포지토리에는 동일한 이름의 분기가 없습니다.
과:
matching
' , (그들은 존재하지 않는 경우를 작성, 같은 이름의 모든 지점을 밀어)simple
'입니다 (현재 분기 만 푸시하고 git 1.7.11 이후로 업스트림에 유사한 이름의 원격 추적 분기 가있는 경우에만 푸시 )두 경우 모두, 업스트림 빈 저장소에는 분기가 없으므로
즉, 로컬 첫 푸시는 전혀 모른다는 것을 의미합니다 .
따라서 최소한 다음을 수행해야합니다.
git push origin master
그러나 당신이 그렇게하면, 당신은 :
master
업스트림 (현재 비어 있지 않은 저장소)에 업스트림 브랜치를 만듭니다 .master
origin
master
그렇기 때문에 첫 번째 푸시에서 다음을 수행하는 것이 좋습니다.
git push -u origin master
이것은 원격 추적 브랜치origin/master
로 기록 되고 다음 푸시가 자동으로 푸시 되도록 합니다.master
origin/master
git checkout master
git push
그리고 그것은 푸시 정책 ' current
'또는 ' upstream
'에서도 작동합니다.
각각의 경우, initial 이후 git push -u origin master
에 간단한 git push로 마스터를 오른쪽 업스트림 브랜치로 계속 밀어 넣기에 충분합니다.
git push
지점은 이미 지점이 존재할 것으로 예상합니까?
simple
' 때문에 : 업스트림 브랜치의 이름이 로컬 업스트림 브랜치와 동일한 경우 기록 된 업스트림 브랜치로 푸시합니다 . 간단한 git push
것만으로 충분합니다.
git push --set-upstream origin new_branch
또는 git push -u origin new_branch
짧게 사용합니다. -all
질문자가 모든 지점을 포함하여 특정 새로운 지점의 이름을 지정 우회 사용되는. 이것은 그의 대답에서 + Klas Mellbourn이 다룹니다.
당신은하지 않습니다 아래 참조
로켓을 달에 발사하려고하지 않기 때문에이 '기능'이 다소 성가신 것을 발견했습니다. 당신도 아마 그렇지 않으면 당신은 여기 없을 것입니다!
수정 사항은 다음과 같습니다. 분기가 원점에 있는지 여부에 관계없이 현재 분기를 암시 적으로 푸시하려면이 명령을 한 번만 실행하면 어디서나 다시 할 필요가 없습니다 .
git config --global push.default current
따라서 다음과 같이 분기를 만들면
git checkout -b my-new-branch
그런 다음 커밋을 한 다음
git push -u
해당 지점에있는 원산지를 가져오고 존재하지 않는 경우 해당 지점을 만듭니다.
나중에 분기에서 끌어 올 경우 -u 비트가 연결되어 있는지 확인하십시오. 나중에 분기를 당길 계획이 없다면 (또는 다른 라이너로 괜찮다면) -u는 필요하지 않습니다.
git push -u
의 출력 git push
새로운 지점을 밀어 때
> git checkout -b new_branch
Switched to a new branch 'new_branch'
> git push
fatal: The current branch new_branch has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin new_branch
간단히 git push
말하면 현재 로컬 지점에서 추적중인 원격 지점이 이미 있다고 가정합니다. 그러한 원격 브랜치가 존재하지 않고이를 작성하려면 -u
(짧은 형식 --set-upstream
) 플래그 를 사용하여 지정해야합니다 .
왜 이럴까요? 구현자는 원격에서 분기를 만드는 것이 실수로하기가 어려워 야하는 주요 조치라고 생각합니다. git push
항상 당신이하는 일입니다.
"지사에 기본적으로 새로운 변경 사항이 적용되지 않습니까?" Git의 "변경"은 커밋이라고 말합니다. 브랜치는 커밋에 대한 포인터입니다. 나에게 푸시를 다른 저장소로 커밋하는 것으로 생각하는 것이 더 합리적입니다. 어떤 커밋이 푸시되는지는 어떤 브랜치에 있는지와 해당 브랜치와 리모트의 브랜치 간의 추적 관계에 따라 결정됩니다.
Pro Git 책 의 Remote Branches 장 에서 지점 추적에 대한 자세한 내용을 읽을 수 있습니다 .
fatal
지점에서 이미 커밋을 수행했습니다.
git push -u origin
하고 원격 저장소로 복사되었습니다.
fatal
언급 한 것과 같은 메시지를 얻지 못했다는 것을 의미합니다. 이 차이는 내가 지점에 무언가를 커밋 한 사실에 달려 있습니까?
fatal
메시지 를받지 못한 지 모르겠습니다 . 차이점은 사용중인 git 구현에 정확히 달려 있다고 생각합니다. 내 출력은 Windows 8에서 실행되는 1.8.1.msysgit.1입니다.
나는 원래 개발자들에 의해 이렇게 빨리 근거를 찾을 수 없었지만, 몇 년간의 Git 경험을 바탕으로 교육받은 추측을 줄 수 있습니다.
아니요, 모든 지점이 외부 세계로 밀려나는 것은 아닙니다. 개인 실험 일 수 있습니다.
또한, git push
모든 지점을 어디로 보내야합니까? Git은 여러 리모컨으로 작동 할 수 있으며 각각에 다른 분기 세트를 원할 수 있습니다. 예를 들어 중앙 프로젝트 GitHub 리포지토리에는 릴리스 브랜치가있을 수 있습니다. GitHub 포크는 검토를 위해 토픽 브랜치를 가질 수 있습니다. 로컬 Git 서버에는 로컬 구성이 포함 된 분기가있을 수 있습니다. git push
현재 브랜치가 추적하는 모든 브랜치를 원격으로 푸시 하면 이런 종류의 구성표를 쉽게 정리할 수 있습니다.
It might represent a private experiment
.Ok 그러나 큰 문제는 무엇입니까? 모든 사람이 일하고있는 "주"지점 master
은 영향을받지 않습니다. 소스 코드를 숨기려고하지 않는 한 2) git push, without a remote, pushes to the current branch's remote
나는 여기서 당신을 잃었습니다 :(
git fetch
하고 있으며 매번 수백 개의 반 작업 지점을 원하지 않습니다 . 2) git push
의 기본 동작을 말합니다. 현재 분기가 추적중인 경우 원격으로 푸시합니다.
처음 확인시
1 단계 : git remote -v
// git initialize가 발견되면 2 단계를 제거하거나 건너 뜁니다.
2 단계 : git remote rm origin
// 그런 다음 전자 메일 주소를 전 세계적으로 구성하십시오
3 단계 : git config --global user.email "youremail@example.com"
4 단계 : git initial
5 단계 : git commit -m "Initial Project"
// 프로젝트 저장소를 이미 추가 한 경우 6 단계를 건너 뜁니다.
6 단계 : git remote add origin %repo link from bitbucket.org%
7 단계 : git push -u origin master
방금이 문제에 대한 추가 순열을 경험했습니다.
feat/XYZ-1234-some-description
Jira 문제 1234로 작업하고 있었기 때문에 지사를지었습니다. 작업하는 동안 더 작은 작업을 추적하기 위해 새로운 Jira 문제를 만들었습니다. 에:
git push -u origin feat/XYZ-5678-a-different-description # failed
이것은이 SO 스레드에서 논의되는 오류를 주었다. 그러나 현재 지점과 다른 지점 이름 으로 푸시하려고했기 때문에 내 문제는 여기에 설명 된 것과 다릅니다. 푸시하기 전에 로컬 브랜치의 이름을 바 꾸었습니다.
git branch -m feat/XYZ-1234-some-description feat/XYZ-5678-a-different-description
git push -u origin feat/XYZ-5678-a-different-description # now works
조금 더 읽은 후에는 현재 분기 이름으로 또는 적절한 경우 src
에를
설정할 수 있음을 깨달았습니다 .git push
HEAD
git push -u origin feat/XYZ-1234-some-description:feat/XYZ-5678-a-different-description # also works
새 지점에서 처음으로 새 변경 사항을 푸시 할 수 있습니다. 그리고 아래 오류가 발생합니다.
*git push -f
fatal: The current branch Coding_Preparation has no upstream branch.
현재 분기를 누르고 리모콘을 업스트림으로 설정하려면
git push -u origin new_branch_name
** Successful Result:**
git push -u origin Coding_Preparation
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 599 bytes | 599.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'Coding_Preparation' on GitHub by visiting: ...
* [new branch] Coding_Preparation -> Coding_Preparation
Branch 'Coding_Preparation' set up to track remote branch 'Coding_Preparation' from 'origin'.
push.default
참조man git-config
). 당신이 할 경우git config --add push.default current
, 다음git push
필요한 경우 자동으로 원격 REPO에 지점을 작성합니다. 이것이 기본값이 아닌 이유는 답변에 설명되어 있습니다.