2012-05-27 2 views
7

github 프로젝트에서 git을 시작하려고합니다. (나는 CVS, SVN, hg를 몇 년 동안 사용해 왔으며, 자식은 내 머리를 잡기 힘들다.) 내가 할 수있는 한 정확하게 지시 사항을 따르고 있으며 간단히 작동시키지 못합니다. 병합 업데이트가 업스트림에서 업데이트됩니다.

나는 나의 갈래 프로젝트를 복제 :

git clone [email protected]:davidgiven/linux-allwinner.git 

추천, 나는 내 하나에서 갈래 프로젝트 추적하는 '업스트림'원격 추가 : 나는 그것에서 가져

git remote add upstream https://github.com/amery/linux-allwinner.git 

를 :

git fetch upstream 

이 모든 것이 정상적으로 작동합니다. 하지만 프로젝트를 포크 한 지 일주일 정도 지났습니다. 그리고 업스트림이 변경되었습니다. 그래서 저는 그러한 변화를 이끌어 내고 싶습니다. 나는 오른쪽 지점 --- allwinner-3.0-안드로이드-V2 현재 해요 --- 그래서 난 내 지점으로 상류에서 병합 :

git merge upstream/allwinner-v3.0-android-v2 

을 ... 그리고 병합 충돌을 얻을.

CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/standby/common.h 
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/standby/Makefile 
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/standby.S 
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/Makefile 
[etc] 

지금, 나는 아무것도에서 확인했습니다; 저는 아직 일을 시작하지 않았고, 프로젝트를 포크로 쓴 이후로 프로젝트는 완전히 변경되지 않았습니다. 따라서 충돌이 있어서는 안됩니다. 그러나 몇 가지가 있습니다. 무슨 일이야, 어떻게 고칠 수 있니?

업데이트 :

git show-branch HEAD upstream/allwinner-v3.0-android-v2 내가 한 마디 이해하지 못하는 말을 내가 가지고있는이를 보여줍니다 : 그것은있을 수

! [HEAD] arm: sun3i: add getioaddr macro 
! [upstream/allwinner-v3.0-android-v2] arm: sun3i: updated irq handling and machine_desc to 3.0 
-- 
+ [upstream/allwinner-v3.0-android-v2] arm: sun3i: updated irq handling and machine_desc to 3.0 
+ [upstream/allwinner-v3.0-android-v2^] arm: sunxi: renable early_printk in all _defconfig except crane's 
+ [HEAD] arm: sun3i: add getioaddr macro 
+ [HEAD^] arm: sun3i: add dummy machine type 
+0

병합 대신 리베이스해야하는 경우와 같습니다. – ThiefMaster

+0

'git show-branch HEAD upstream/allwinner-v3.0-android-v2'는 흥미로운 것을 드러 낼 수 있습니다. – georgebrock

+0

그게'show-branch'의 완전한 출력입니까? 나는 그것이'++'로 시작하는 줄로 끝나길 기대한다. – georgebrock

답변

11

, 즉 상류가 다시 한 역사 (리베이스, 수정 , ...) - 그들은 그렇게해서는 안됩니다. 그러나 당신은 결코 알 수 없을 것입니다. 이것은 로컬 변경 내용을 무시하고 만들 것입니다

git reset --hard upstream/allwinner-v3.0-android-v2 

(: 당신은 당신이 로컬 변경 사항이 있거나 범하지 말 때문에

, 당신은 당신의 지점을 재설정하여 다시 깨끗한 상태로 저장소를 데려 와야한다 현재 HEAD의 커밋에 도달!)


은 위의 당신이 (힘), 원격 저장소에 지사를 새로 재설정 상태를 밀 때 y를, 그렇지 않으면 당신은 다시 충돌이 발생하는 것으로 가정 o origin에서 당겨보십시오.

git push origin +allwinner-v3.0-android-v2 

이미 로컬로 자신을 저지른 경우, 리베이스해야 할 것 (또는 체리 픽) 상류 지점의 상단에 커밋 한 다음 원점 푸시을한다. 그런 식으로 당신은 같은 방식으로 상류했던 해당 지역의 역사를 다시 쓰고, 즉 위에 변경, 적용됩니다

git rebase --onto upstream/branch \ 
    last-original-upstream-commit-before-yours \ 
    your-branch 
+0

나는 그것을 시도했다. 불행히도 도움이되지 않습니다. 이제'git push '가 실패합니다.''git pull'을 먼저해야합니다. 하지만'git pull '은 내가 전에 머리를 쓰는 것과 같은 병합 오류를 만들어 낸다. 이것은 실제로 내가 기대할 수있는 것입니다. 나의 이해는'git reset'이 현재 브랜치를 지정된 브랜치로 바꾸기 때문에'upstream/allwinner-v3.0-android-v2'의 사본을'allwinner-v3.0-android -v2'. 그러나 충돌이 '원산지/...'와 '상류/...'사이에서 일어나고 있기 때문에 유일한 변화는 갈등이 일어난 때입니다. –

+0

@DavidGiven : git push to where? 푸시가 더 이상 앞으로 나아 가지 않기 때문에 실패 할 것입니다. 당신은 당신이 아무 것도 저 지르지 않았다는 것을 당신의 질문에서 말하고 있습니다, 그래서 아마도 한 번의 강제적 인 강요가가는 길일까요? – knittl

+0

'git push origin allwinner-v3.0-android-v2'. (덧붙여 말하자면, 벌거 벗은'git push '와 똑같은 일을합니다.) TBH, 여기서 무슨 일이 벌어지고 있는지 이해하고 싶습니다. 아직 커밋이 없지만 곧이 작업을 시작하고 싶습니다. 따라서 핵 - 모든 솔루션이 아니라 다시 발생하는 경우를 대비하여 일반적인 솔루션이 필요합니다. –

2

show-branch 출력 upstreamHEAD 각 (가정 공통 조상 이후 두 커밋을 추가 한 의미를 그것은 전체 출력입니다).(참고 : http://www.gitguys.com/topics/git-show-branch-to-see-branches-and-their-commits/) 만약 당신이 아무것도하지 않았다면, 그것은 업스트림이 리베이스 (또는 히스토리를 변경 한 다른 것)를 푸시했음을 의미합니다. 니가 아무 것도 저 지르지 않았기 때문에 knittl의 대답은 당신이 원하는 것입니다.

가치가있는 부분에 대해서는 git log --oneline --graph --decorate --remotes --branches도 좋습니다. 모든 지점과 리모컨이 포함 된 ASCII 그래프가 표시되므로 어디서 무슨 일이 일어 났는지 시각화 할 수 있습니다.

관련 문제