2012-04-08 4 views
2

git push를 수행하면 3 개의 분기가 관련되어 있습니다. 1) 로컬 브랜치 'foo1'2) 로컬 원격 추적 브랜치 'origin/foo2'(푸시/풀 후 원격 foo3와 항상 동일한 커밋에 있음) 3) 'foo3' 원격 저장소. 당연히 그들은 모두 보통 foo라고 불릴 것이다. 그러나 나는 다른 이름을 원한다. 그래서 나는 제대로 자식을 이해하고이 질문을 할 수있다. foo2를 어디에 지정할 수 있는지 이해할 수 없습니다. 나는git push에서 'origin/master'부분을 지정하십시오.

git push origin foo1:foo3 

을 그리고 내 .git/config에

[branch "master"] 
remote = origin 
merge = refs/remotes/origin/foo2 

1과 3이 확인되어 포인트에 그것을 가지고,하지만 난 내 로컬의 repo에서 원점 /에서는 foo2가없는 경우. 내가 뭘 놓치고 있니? 또는 내 원격 추적 지점이 인 경우 항상이라는 리모컨과 정확히 동일한 방식으로 이름을 붙였습니다. 괜찮습니다. 제대로 이해하고 싶습니다.

git-push 매뉴얼은 필자의 예제에서 2 개의 ref (refspec src와 dst), 1과 3을 말한다. 원격 repo의 dst 브랜치가 업데이트 된 후, 원격 원격 추적 참조가 업데이트 된 이후의 매뉴얼에 대한 설명은 어디에 있습니까?

+0

@ VonC의 대답은 정확합니다 (물론 :-)). 여기서 근본적인 문제는 푸시와 풀 사이의 명백한 대칭을 넘어서고 있다는 것입니다. 거짓 대칭입니다. 'push '의 반대는'pull'이 아니라'fetch'입니다. (그럼에도 불구하고 정확하게 대칭이 아닙니다.) 모든 것을 더 명심해야합니다. – torek

답변

1

git push에는 세 개의 분기가 표시되지 않습니다. 두

foo2는 묘사 (자식이 + 자식 병합 페치) 또는 git rebase 자식 손잡이위한 :
(git config)에서 branch.<name>.remote 함께

branch.<name>.merge 

정의, 상류 지점 대 주어진 가지.
병합 할 브랜치는 git fetch/git pull/git rebase이며 git push에도 영향을 줄 수 있습니다 (push.default 참조).
브랜치 <name>에있는 경우, git는 FETCH_HEAD에서 병합을 위해 표시 할 기본 refspec을 가져옵니다. 이 값은 refspec의 원격 부분처럼 처리되며 "branch.<name>.remote"으로 지정된 원격지에서 가져온 ref와 일치해야합니다.

병합 정보 (제 1 호출에 git fetch)이를 병합 기본 분기를 조회하기 git pull 의해 사용된다.
이 옵션이 없으면 git pull은 기본적으로 가져온 첫 번째 refspec을 병합합니다.
여러 값을 지정하여 낙지 병합을 가져옵니다. branch.<name>.merge (branch.<name>.remote의 부재)을 상류 지점을 정의하는 의미

으로 git1.7.10 후, 기본 누름 정책이 upstreammatching에 변경 될 수 있음 ("What is the result of git push origin?"참조), 그런 다음 기본값으로 git push에 사용할 수 있습니다.

0

맞습니다. 원격 추적 분기의 이름은 원격 저장소의 분기와 같습니다. 다르게 혼란 스러울 것입니다!

따라서 origin/foo3origin의 지점 foo3을 나타냅니다. git fetch을 실행 한 후 리모컨과 올바르게 동기화됩니다.git pull을 실행하면 실제로는 git fetch ; git merge이 실행됩니다.

git push origin foo1:foo3을 실행하는 경우 로컬 브랜치 foo1을 원격 브랜치 origin/foo3에 푸시합니다. 그래서 귀하의 경우에는 foo2 지점을 지정하는 것이 타당하지 않습니다.

+0

참고 자료 :'git checkout -b foo1; git pull origin foo3 : remotes/origin/foo2' 명령을 실행합니다. 그래서 당겨 받기 시나리오에서 나는 지금 정확히 내 질문에 설명 된 3 가지를 가지고있다. 여기에 3 가지 가지 각각에 대한 특이성이있을 수 있습니다. 이 세 가지 이름은 모두 의미가 없을지라도 이름이 다릅니다. 하지만 어쨌든 다른 방법은 foo1과 foo3 ('git push origin foo1 : foo3')에만 영향을 미칠 수 있지만 더 이상 foo2가 아니기 때문에 완전히 혼란 스럽습니다. 나는 그 비대칭 성을 이해하지 못한다. 나는 뭔가를 놓친 것이 틀림 없다. –

관련 문제