2013-03-01 1 views
1

다른 위치에서 원격 Git 마스터 브랜치에 대한 일부 변경 사항을 푸시 한 다음 로컬 마스터 리포지토리에서 일부 파일을 편집하고 다른 것을 삭제 한 일부 변경을 수행했으며 이제 이러한 변경 사항을 원격 저장소의 변경. 변경 사항을 푸시하려고하면 문제가 발생합니다. 내 커밋은 원격 분기에서 편집되고 업데이트 된 이전 파일을 계속 사용합니다. 나는 원격 파일의 변경 사항을 다운로드 및 변화에 병합원격 마스터와 함께 Git 동기화가 변경되었습니다.

EDIT 1

이 저장소의 역사 방법을 이해하지 않습니다. 6fee6bf 커밋 2

  • 6fee6bf 테스트
  • 48ccbc4 (HEAD을 확약 원격 저장소

    • aef9a19 새로운 TMP (마스터)로 푸시 된 이전에 새로운 파일이 커밋을 추가하는 커밋 개정 인 원점/마스터 마스터) 시험을 저지 X2 X3에게
    • 04f4a67 오래 COMIT을 오래 aba1ce0
    • 커밋
    • f006d29 커밋 이전
    • 1f466df 커밋 이전 X4
    • e22f33b 오래된 커밋 X5
  • 답변

    3

    제 의견으로는 현재 마스터에서 커밋 된 모든 것이 있는지 확인한 다음 거기에서 새 분기를 만듭니다. 그런 다음 로컬 마스터를 원격 마스터로 하드 재설정하십시오. 그런 다음 rebase 또는 cherry-이 변경 사항을 선택하십시오.

    git branch tmp-master 
    git fetch origin 
    git reset --hard origin/master 
    

    지금 당신은 쉽게 두 가지의 차이점을 시각화를 사용할 수 있습니다 : 다음과 같은 뭔가

    git log --decorate=short --oneline --graph --all 
    

    다른 커밋 체리 따기와 당신은 아마 될 것 가서 충돌을 고정 가장 쉬운 방법이지만 재베이스를 시도해 볼 수도 있습니다. 좀 더 구체적인 단계가 필요하면 알려주세요. 쓸 것입니다.

    업데이트 : 이제

    당신이 여기, 당신은 (master에서) 시도 할 수 있습니다 :

    git checkout tmp-master 
    git rebase master 
    git checkout master 
    git merge --ff tmp-master 
    git branch -d tmp-master 
    git push origin master 
    
    :
    git merge tmp-master 
    

    하지만 당신은 할 수 있습니다 역사를 커밋 청소기에 대한

    다음 시도

    이것은 로컬 커밋을 취하여 원격 변경 사항 위에 다시 적용합니다. 근본적으로 동일한 작업을 수행하고 있지만 두 개의 다른 시스템에서 수행 중이므로 "잘 전환 된 시스템"이 커밋을 병합하지 않기를 바랄 것입니다.

    이제는 충돌이있을 수 있습니다. 그것들을 돌볼 몇 가지 방법이 있습니다. 당신이 충돌을 가지고 로컬 변경 후 다음과 같이 우선 순위가 걸릴 알고합니다 (tmp-master 지점에서 가정을하고 REBASE에서 충돌이) 경우

    git rebase --abort 
    git branch tmp-master-save 
    git rebase -X theirs master 
    

    모든 것을 위의 단계 git checkout master부터 계속 잘 보이는 경우 확인 . 다른 tmp-master-save 분기도 삭제해야합니다. 안전한 보관을 위해 만들어졌습니다. 당신이 이것에 초보자 일 때 안전 메커니즘을 갖는 것이 항상 낫습니다.

    +0

    나는 당신의 명령을 실행했다. 그리고 이것은 상황이다. 나는 로그에서 원격으로 밀어 넣어야 만하는 커밋을 가지고있는 로컬 tmp-master를 가지고있다. 마스터 브랜치는 하드 리셋되어 원격 HEAD 커밋에있다. 자, 두 가지를 어떻게 병합 할 수 있습니까? – Stefano

    +0

    @Stefano 업데이트 됨. 그게 네가 가고 싶은 곳으로 가면 알려줘. 그렇지 않다면 더 할 일이 많습니다. 정확히 내가 repo의 정확한 상태를 모르는 때를 말하는 것은 어렵습니다. 아, 위의'git log' 명령에서 중요한'--all' 플래그를 잊어 버렸습니다. 모든 역사를보기 위해 매우 중요합니다. –

    +0

    내 질문에 저장소 기록을 추가했습니다. 나는 여전히 작동시키지 못한다. 원격 저장소의 변경 사항은 사라지고 병합되지 않는다. – Stefano

    0

    당신이 당신의 커밋을 추진하기 전에, 당신이 자식이 --rebase 명령을 당겨 사용하여 할 수있는 저장소에 변화를 가져 오기위한 요청해야합니다. 변경 사항을 가져 와서 안전하게 할 수있는 모든 항목을 병합합니다. 일부 문제가 발생하면 스스로 충돌을 해결하고 git rebase --continue를 사용하여 병합을 계속하라는 메시지가 표시됩니다.

    0

    나는 이렇게 제안 :

    git fetch origin 
    
    git rebase origin/master master --preserve-merges 
    

    첫 번째 명령 fetch이 지역의 repo에 원격 REPO에서 정보를 가져 오는 것입니다. 모든 변경 사항을 가져 오지만 자동으로 병합되지는 않습니다.

    rebase 명령은 먼저 로컬 마스터와 리모트 사이의 공통점으로 돌아가고 리모트에서 온 모든 변경 사항의 빨리 감기 병합을 수행 한 다음 변경 사항을 맨 위에 적용합니다. --preserve-merges을 사용하면 분기간에 로컬 복사본에 병합이있는 경우 클리너 기록이 만들어집니다.

    +0

    시도했지만 편집 한 파일에 로컬 편집이 있지만 원격 변경 사항과 병합되지 않았습니다. rebased했을 때 에러는 발생하지 않았지만 2 커밋 만 사용했지만 이전에 변경해야하는 부분은 더 오래되었습니다 – Stefano

    +0

    @stefano - 로컬 복사본에서 변경 한 내용을 커밋 했습니까? 그렇지 않다면'merge' 나'rebase'를 시작하기 전에'git status'가 로컬 변경 사항을보고하지 않아야합니다. – Tuxdude

    +0

    로컬 저장소에 변경 사항을 커밋했습니다 (원격으로 밀어 넣지 않았습니다). git status는 작업 디렉토리가 깨끗하고 분기가 2 커밋보다 앞서기 때문에 커밋 할 것이 없다고 말합니다. 모든 것을 시도했지만 로컬 저장소와 병합 된 원격 저장소의 변경 내용을 가져올 수 없습니다. – Stefano

    관련 문제