2010-04-26 4 views
9

나는 끌어 오기 원점 some_branch을하고 있는데 많은 변화가 있음을 알 수있다. 결국 나는 내 모든 것을 지워도 상관 없다.리모컨의 모든 변경 사항을 어떻게 수락합니까?

어떻게 대신 모두 받아 들일 수 있습니까? 아니면 mergetool을 사용하고 하나씩 파일을 병합 할 수 있습니까?

답변

8

그냥 : 진심

git clone $url 

! 그것이 최선의 방법입니다.

모든 종류의 git resetgit branch 명령을 사용하여 참조를 이동할 수 있지만 나중에 참조 할 수 있도록 커밋을 로컬 저장소의 어딘가에 유지하는 것이 유일한 방법입니다. 이것이 목표라면 전체 저장소를 그대로 유지하고 원본을 다시 복제하십시오.

foo, 한 가지에 모든 변경 사항을 적용하려면

git checkout foo 
    git fetch origin +refs/heads/foo:refs/remotes/origin/foo 
    git reset refs/remotes/origin/foo 

foo 지금 같은에서 fooorigin에 커밋 가리 킵니다. 작업 디렉토리에서 파일을 날려 버리려면 --hardgit reset에 추가하십시오. 먼저 병합하려면 fetchpull으로 바꾸십시오.

로컬 repo에 잔뜩 커밋 된 커밋이있을 수 있습니다.이 커밋은 언젠가 정리 될 수 있지만 잠시 동안은 여전히 ​​reflog를 통해 액세스 할 수 있습니다.

+0

잘 알고 있습니다 :-) –

+1

큰 문제가 있습니다. 작업중인 트리에 많은 추가 *가 있습니다. 리모컨에서 수행 한 모든 변경 사항을 수락하거나 적용하고 싶습니다. 나는 현재 일하는 모든 상태를 버리고 싶지 않다. 그래서 이것은 나를위한 답으로 작용하지 않습니다. – rfay

+0

@Randy, 그건 다른 질문이지만, 좋은 질문입니다. – cdunn2001

0

내가 사용한 접근 방식은 다음과 같습니다. 이는 괜찮은 것으로 보입니다. 나는 원격지에있는 모든것의 새로운 버전을 담고있는 "theirs"라는 지점을 가지고있다. "ours"라는 버전은 오래 전의 버전을 기반으로 한 나의 작업입니다. 너무 많은 관련이없는 변경 사항이지만 많은 추가 사항 (사이트의 새 하위 디렉토리/전체)은 유지하고 싶습니다.

git checkout ours 
git checkout theirs -- *.php *.txt *.config modules themes includes scripts 
git commit -m "New version with all new key files from 'theirs'" 

두 번째 체크 아웃의 파일 및 디렉토리 목록을 올바르게 수정하면이 문제가 해결됩니다.

"내"지사를 기반으로 한 내역을 원한다면 다른 방법으로이 작업을 수행 할 수 있습니다.

+0

랜디, 그 주석을 편집 한 다음 각 줄을 8 칸 (어쩌면 4 줄) 들여 쓰기하여 더 나은 뜻을 나타낼 수 있습니다. '--ours'및 '--theirs'는 유효한 플래그이므로 설명하는 분기 이름에 대해 다른 단어를 사용해야합니다. 하지만 예, 경로를 지정하면 해당 파일 만 가져올 수 있습니다. – cdunn2001

5

또는 모든 충돌하는 원격 파일을 받아 강제로

git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git checkout --theirs 
git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git add 

.

관련 문제