2016-08-04 9 views
1

는 내가 강제로 원격의 repo에서 파일이있는 지역의 repo를 덮어 쓰려면, 나는 이렇게 알고 :히스토리를 보존하면서 원격 저장소의 변경 사항을 사용하여 강제로 로컬 저장소를 겹쳐 쓰려면 어떻게합니까?

git fetch --all 
git reset --hard origin/master 

이 가진 문제는 내가 지방의 repo의 역사를보고 갈 때 , 그것은 역사를 완전히 없애고 원격 repo의 역사를 카본으로 대체했습니다.

히스토리를 보존하면서 강제로 덮어 쓸 수있는 방법이 있습니까? 예를 들어

, 나는 다음과 같은 내용으로 지역의 repo에있는 파일이있는 경우 :

- ContentA 
- ContentB 
- ContentC 

을 그리고 다음과 같은 내용으로 원격의 repo에서 같은 파일이 있습니다

- ContentA 
- ContentC 
- ContentD 

을 원격 저장소에서 데이터를 가져온 후 내역에 파일에 대해 다음과 같이 표시하려고합니다.

Version #1 
- ContentA 
- ContentB 
- ContentC 

Version #2 
- ContentA 
- ContentC 
- ContentD 

I don '

Version #1 
- ContentA 
- ContentC 
- ContentD 

도 아니다 나는 그것이 (병합)에서이 보여주고 싶은 수행합니다 : t은 (강제적 덮어 쓰기에서)이 보여주고 싶은

Version #1 
- ContentA 
- ContentB 
- ContentC 

Version #2 
- ContentA 
- ContentB 
- ContentC 
- ContentD 

이 가능를?

+0

사용자 정의 git merge 드라이버를 정의 할 수 있습니다. – DavidN

+0

또한, --hard to origin/master를 재설정하면 로컬 마스터가 커밋됨을 알 수 있으므로 작업을 손실했다고 생각할 수 있습니다. 병합을 원하는 것처럼 들리지만 특수한 방식으로 진행됩니다. git을 사용하여 두 버전 모두를 쉽게 볼 수 있기 때문에 다른 사람들과 마찬가지로 git을 사용하지 않는지 궁금합니다. 일반적으로 사람들은 파일을 결합 할 때 파일을 연결하지 않습니다. 그들은 병합 방식으로 그들을 결합하고 싶다. – DavidN

+0

리모트를 로컬에 rebase 할 수 있습니다. 리모트를 별도의 브랜치로 가져 와서 --soft, stash, pop, 또는 cherry을 리셋 할 수 있습니다. –

답변

1

리모컨을 병합 할 수 없습니다. 당신은 병합을 할 필요가있다. 그리고 나서 당신은 가지고있는 것을 밀어 넣는다. 그것은 단지 당신의 커밋에 빨리 감기다. 그래서 당신은 커밋을 정렬하여 원하는대로 처리하고 푸시해야합니다.

--no-commit 옵션을 사용하여 병합을 수행하고 git checkout을 사용하여 원하는 쪽 파일을 선택할 수 있습니다. -ours 또는 git checkout - theirs, 그 다음에 자식 파일을 추가하고 마지막으로 git commit을 사용하여 병합을 완료하고 원하는 파일 변경 사항을 선택합니다. 당신이 원하는 히스토리에 관해서는, 실제로 커밋 코멘트를 편집 할 수 있습니다.

+0

전체 repo에서 같은 일을하고 싶다면 no-commit merge의 문제로가는 대신'--strategy ours' 또는'--strategy theirs'와 병합 할 수 있습니다. – hobbs

+0

--strategy가 재귀적일 때 (즉, 기본 전략 인 경우) thats -X ours 또는 -X theirs라고 생각합니다. – DavidN