2012-11-28 4 views
9

밀어, 그래서이 작업이 간단하기 때문에이 질문은 오늘의 newbiest 문제가 될 수 있다고 생각하지만 끔찍한 두통의 원인 ..힘내 병합 나는 힘내으로 시작하고

나는이 개 지역의 지점을 가지고 :

  • 마스터
  • 지역/생산

그리고 2 리모컨 :

  • 마스터 내가 생산 로컬 변경 사항을 전달해야

  • 생산. 그래서, 내 워크 플로우이었다 :

    git checkout local/production 
    git merge master 
    git commit 
    git push 
    

    자식 병합 : 은 일이 잘, 모든 차이를 감지 보인다.

    자식 커밋 :

    지역 지점/생산에

    지사는 앞서 '원산지/생산'의 2 커밋에 있습니다.

    아무것도 (청소 작업 디렉토리)

    그리고 자식 푸시 커밋 없습니다 :

    모든 - - 날짜를 그래서 그게 다야

    , 나는 할 수 없었다 내 변경 사항을 원격 저장소로 푸시합니다.

  • 답변

    12

    근본 원인 :local/productionorigin/production를 추적하지 않습니다 그것이 나에게 나타나는 짧은 설명을 절단합니다. 이것을 git branch -avv으로 확인할 수 있습니다.

    는 약 git push는 :

    git push ... [<repository> [<refspec>...]] 
    
    The special refspec : (or +: to allow non-fast-forward updates) directs git to 
    push "matching" branches: for every branch that exists on the local side, the 
    remote side is updated if a branch of the same name already exists on the remote 
    side. This is the default operation mode if no explicit refspec is found (that is 
    neither on the command line nor in any Push line of the corresponding remotes 
    file---see below). 
    

    간단한의 결과로 인해 : 인수없이 git push합니다 (git-push(1) 매뉴얼 페이지에서) 해당 지역의 추적 지점에 업데이트 한 모든 원격 브랜치를 업데이트합니다 git push은 로컬 브랜치에서 수행 된 변경을 잊어 버린 경우 가끔 예상치 못한 경우가 있으므로 개인적으로 내가 푸시 할 브랜치를 명시 적으로 지정하고 싶습니다.(단

    git push -u origin local/production:production 
    

    : 당신이 local/productionorigin/production 추적하려면

    git push origin local/production:production 
    

    , 당신은 옵션 -u을 사용 origin/productionlocal/production 추적 분기를 만들 수 있습니다 귀하의 경우에는 당신이 무엇을 원하는 것 같다 한 번 필요함). 그런 다음 원점에서 local/production으로 당길 수 있습니다.

    요약은 : 당신은 지점과 git push의 독특한 의미를 추적의 개념을 이해할 필요가있다.

    P. 지점 이름 local/production의 선택에 대해 궁금합니다. 왜 production가 아닌가? 이미 productionorigin/production을 추적하고 있으며 로컬 개발을 위해 local/production을 사용하고 계신지 의심됩니다. 이 경우 합리적인 작업 흐름은 다음과 같이이다 : 새로운 커밋이 production에있는 경우

    1. git pull origin production:productionproduction
    2. 에 대한 변경 사항을 뽑아, 그 local/production 중 하나를 리베이스 다음 뒤에입니다 당신의 productionlocal/production (또는 local/productionproduction)
    3. 당신이 production에 변경, merge 또는 cherry-pick 커밋을 밀어 git push origin production:production로 변경을 추진하려는 순간을 병합합니다.
    +0

    바로 @FooF입니다. 문제는 브랜치 로컬/프로덕션을 연결 (또는 추적)하지 않았기 때문입니다. 그래서,'git push '(인수없이)는이 가지를 감지하지 못했습니다. 또 다른 해결책은 git config에'git config remote.origin.push local/procution : refs/heads/production'을 추가하는 것입니다. 어쨌든 나는 여러분이 푸시 할 브랜치를 명시 적으로 지정하는 것에 동의합니다. –

    관련 문제