2009-05-11 4 views
21

나는 master 브랜치에서 만든 브랜치로 100 % 작업을합니다. 동료가 원점/마스터로 다시 밀었으므로 이러한 변경 사항을 개인 지점으로 푸시하려고했습니다. 나는 다음에 '자식 상태'내가 얻을 다음에 '자식 체크 아웃 마스터'를 수행 할 때 : 힘내 : 원점/마스터보다 먼저 커밋하지 않는 지점은 무엇입니까

# Your branch is ahead of 'origin/master' by 2 commits. 

어떻게 지점 나는이 커밋에 의해 전방에 커밋되지 않습니다? 무엇이 최선인지를 알아 내고 본질적으로 그것들을 실행 취소하는 가장 좋은 방법은 무엇입니까? 원산지/마스터에 아무 것도 보내지 않으므로 알 수없는 충돌이 발생할 수 있습니다.

+0

Git이 아주 간단한 도구이기 때문에, 이것에 대해 가장 혼란스러운 부분입니다. 나는 너와 똑같은 문제가있다.나는 결코 내 주인에게 맡기지 않는다. 나는 항상 갈라서 나의 변화를 만든다. 내가 'git pull origin master'를 할 때 나는 그것이 200 커밋 뒤에 있음을 알게된다. 왜? 나는 결코 그것을 건드리지 않았다. 나는 그들이 이것을 정리하기를 바란다. – Jeff

답변

35

원산지/마스터에없는 HEAD에서 당신이 가지고있는 커밋 보려면 :

git log origin/master.. 

그들을 멀리 날려 원산지/마스터와 같은 머리를 만들려면 :

git reset --hard origin/master 

어떻게 자신의 저장소에 변경 사항을 적용 했습니까? 나는 당신이 "푸시"라고 언급 한 것을 알아 차렸습니다 ... 원산지가 중앙 repo입니까? 동료의 레포? 나는 당신이 실제로하고 싶었던 것이 푸시하기보다는 직접 또는 중앙 스테이징 포인트에서 동료의 변화를 이끌어내는 것이라고 생각합니다. 원래 원점/마스터보다 앞선 두 가지 변경 사항은 사실 동료의 변경 사항이지만 원점/마스터 추적 지점은 유효하지 않을 수 있습니다.

+0

감사 araqnid. 그냥 궁금해서, git log origin/master ..는이 경우 어떻게합니까? –

+3

리비전의 * 범위 *를 사용하는 git 명령에서 A..B는 "B^A"또는 "B - 없음 A"의 줄임말입니다. "A .."자체는 "HEAD - not A"의 줄임말입니다. git은 리비전 B를로드 한 다음 리비전 그래프로 돌아가 A에서 도달 할 수있는 커밋 (A 자체)을 만났을 때 중단합니다. 그래프가 단순한 라인 인 간단한 개정 내역의 경우, 이것은 A 이후의 커밋을 B로 표시하는 것을 단순화합니다. – araqnid

+0

+1 감사합니다. <3 –

0

지점에 git rebase을 입력하셨습니까? 입니까?

브랜치 (git checkout -b testrebase)를 복사하고 git rebase master을 발행하여 해당 기능이 작동하는지 확인할 수 있습니다. 이렇게하면 마스터와 관련된 모든 커밋을 해체 한 다음 다시 적용하려고합니다 (기본적으로 이력을 이해하게됩니다). 작동하지 않으면 testrebase를 삭제하십시오.

4

당신은 master 브랜치에서 작업 중이고 origin/master에없는 두 개의 커밋을 작성했습니다.

메시지 # Your branch is ahead of 'origin/master' by 2 commits.가 말하는 :

# Your branch 'mybranch' has two commits not in 'origin/master' 

상상 자식 사용자 SVN 같은 버전 번호, 당신이 지점이 커밋했다있어 1, 2, 3, 4, 5 -하지만 origin/master은 1, 2가, 3. 따라서 개정 역사는 ..

your branch         -- [commit 4]--[commit 5] 
              /     /\ HEAD 
master --[commit 1]--[commit 2]--[commit 3]-/ 
             /\ origin/master 

로그의 마지막 두 커밋을 표시하려면, 당신이 할 수있는 .. 다음 엉터리 ASCII 다이어그램과 같이 보입니다

,622,
0

마스터의 repo 버전으로 원본/마스터가 최신 버전인지 확인해야 할 수 있습니다. 다음을 실행 해보십시오.

git fetch origin master 

따라서 원산지/마스터가 리포의 마스터와 동일합니다. 당신이

git pull origin master 

를 실행하면 다음 당신은 당신의 로컬 마스터가 앞서 저지른 얼마나 많은의 정확한 표시를 얻어야한다. 그런 다음 araqnid's command을 실행하여 실제로 다른 커밋을 확인할 수 있습니다.

관련 문제