programing

새 분기를 명시적으로 푸시해야 하는 이유는 무엇입니까?

lastcode 2023. 6. 26. 21:22
반응형

새 분기를 명시적으로 푸시해야 하는 이유는 무엇입니까?

는 처입다니에 .git연습하고 있습니다.나는 지역 지점을 만들었지만, 내가 만들었을 때 그것을 보았습니다.git push저장소에 분기가 업로드되지 않았습니다.저는 실제로 해야만 했습니다.git push -u origin --all.
왜이가한? 지점은 기본적으로 추진해야 할 새로운 변화가 아닌가요?두 번째 명령을 실행해야 하는 이유는 무엇입니까?

실제 이유는 새 레포(git init)에 분기(no)가 없기 때문입니다.master분기가 전혀 없음, 분기가 0임)

따라서 처음으로 빈 업스트림 레포(일반적으로 비어 있음)로 푸시할 때 해당 업스트림 레포에는 동일한 이름의 분기가 없습니다.

그리고:

두 경우 모두 업스트림 빈 repo에 분기가 없기 때문에:

  • 일치하는 명명된 분기가 아직 없습니다.
  • 업스트림 분기가 전혀 없습니다(동일한 이름을 사용하거나 사용하지 않음)!추적 여부)

즉, 로컬 첫 번째 푸시에서는 다음 사항을 전혀 알지 못합니다.

  • 밀어야 할 곳
  • 푸시 대상(원격 추적 분기로 기록되거나 이름이 동일한 업스트림 분기를 찾을 수 없기 때문에)

따라서 적어도 다음 작업을 수행해야 합니다.

git push origin master

하지만 당신이 그렇게만 한다면, 당신은:

  • 업스트림 림생다니합이 됩니다.master업스트림의 분기(현재 비어 있지 않은 repo): 좋습니다.
  • 로컬 지점에 기록하지 않습니다.master.origin) 'master branch 불량 (bad branch): (bad branch): 좋지 않습니다.

그렇기 때문에 첫 번째 푸시에서는 다음 작업을 수행하는 것이 좋습니다.

git push -u origin master

또는 Git 2.37과 새로운 글로벌 옵션을 사용합니다.

git config --global push.autoSetupRemote true
git push

그것은 기록될 것입니다.origin/master원격 추적 분기로, 다음 번에 자동으로 밀어넣기를 활성화합니다.masterorigin/master.

git checkout master
# Git 2.23+
git switch master
git push

은 푸시 정책인 '푸시 정책입니다.current또는 'upstream'.
의 경우,첫 각의경우 에, 번이후에째첫각▁the.git push -u origin master간단한 git push는 계속 밀기에 충분할 것입니다.master오른쪽 상류 지점으로.

그렇지 않습니다. 아래를 참조하십시오.

저는 달에 로켓을 발사하려는 것이 아니기 때문에 이 '특징'이 다소 짜증난다고 생각합니다. 그냥 제 빌어먹을 나뭇가지를 밀어보세요.당신도 아마 그럴 거예요, 그렇지 않으면 여기 없을 거예요!

수정 사항은 다음과 같습니다. 분기가 오리진에 존재하는지 여부에 관계없이 현재 분기를 암시적으로 푸시하려면 이 명령을 한 번만 실행하면 아무 곳에서도 다시 실행할 필요가 없습니다.

git config --global push.default current

이렇게 가지를 만들면 다음과 같이 됩니다.

git checkout -b my-new-branch

그런 다음 커밋을 하고 다음을 수행합니다.

git push -u

(해당 분기에 있는) 오리진으로 내보내고 해당 분기가 존재하지 않는 경우 해당 분기를 생성합니다.

나중에 해당 분기에서 끌어낼 경우 -u비트가 연결되어 있는지 확인합니다.나중에 분기를 끌 계획이 없는 경우(또는 끌 계획이 있는 경우 다른 하나의 라이너도 괜찮습니다) -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 Branchs 장에서 확인할 수 있습니다.

저는 원래 개발자들에 의한 근거를 이렇게 빨리 찾을 수는 없었지만, Git의 몇 년간의 경험을 바탕으로 교육받은 추측을 해볼 수 있습니다.

아니요, 모든 지점이 외부로 밀고 나가고 싶은 것은 아닙니다.개인적인 실험일 수도 있습니다.

게다가, 어디서 해야 합니까?git push모든 가지를 보내시겠습니까?Git는 여러 원격에서 작동할 수 있으며 각각 다른 분기 집합을 가질 수 있습니다. 예를 들어 중앙 프로젝트 GitHub repo에는 릴리스 분기가 있을 수 있고 GitHub 포크에는 검토를 위한 주제 분기가 있을 수 있으며 로컬 Git 서버에는 로컬 구성이 포함된 분기가 있을 수 있습니다.한다면git push현재 분기가 추적하는 원격으로 모든 분기를 푸시할 수 있습니다. 이런 종류의 계획은 쉽게 망칠 수 있습니다.

HEAD는 현재 분기 sogit push -u origin HEAD works의 줄임말입니다.이제 별칭을 사용할 때마다 이 입력을 피하려면 다음과(와)

git config --global alias.pp 'push -u origin HEAD'

이후 git-b 브랜치를 통해 생성된 브랜치를 푸시하고 싶을 때마다 다음을 사용하여 푸시할 수 있습니다.

gitpp

이것이 누군가를 위해 시간을 절약하기를 바랍니다!

처음 확인 시

1단계:git remote -v
//git를 하거나 건너뜁니다.

2단계:git remote rm origin
다음 주소를 구성합니다. git//get//getablish는 다음과 같습니다.

3단계:git config --global user.email "youremail@example.com"

4단계:git initial

5단계:git commit -m "Initial Project"
//step-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이름으로 현재지이또는그냥로름으점그냥▁either▁the▁to로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'.

언급URL : https://stackoverflow.com/questions/17096311/why-do-i-need-to-explicitly-push-a-new-branch

반응형