2014-03-27 2 views
0

기능 분기에서 하나의 파일을 선택하여 master으로 병합하고 병합이 중요하지 않은 경우 git checkout을 사용합니다. 그러나 동일한 파일에 대한 새로운 변경 사항이 master 인 경우 체크 아웃 작업이 변경 사항을 덮어 씁니다.git checkout을 사용하여 파일 병합

내가 원하는 것은 기본적으로 파일의 변경 사항을 덮어 쓰지 않고 병합하는 것입니다. (그 목적과 반대되는 것처럼 보입니다.) 그것은 기본적으로 다음 단계를 수행해야합니다

git diff <sha1>..<sha2> > changes.patch 
git apply changes.patch 

물론,이 작업을 수행하려면 별칭을 만들 수도 있지만 git checkout 나를 위해이 작업을 수행 할 수 있는지보고에 특히 관심이 있어요.

답변

0

주로 Grantovich의 게시물과 내 의견을 종합하여 & hellip;

Git에서 병합은 커밋에서 작동하기 때문에 병합 양쪽에서 커밋으로 표시되는 리포지토리의 전체 스냅 샷에서 발생하므로 기본적으로 하나의 병합 만 병합 할 방법이 없습니다. 파일.

당신이이 비록 할 수있는 일 :

  1. 가 (당신이 아직 커밋하고 싶지 않은 변경이있는 경우 가능 git stash 사용) 작업 트리와 인덱스가 깨끗한 지 확인합니다.
  2. git cherry-pick -n <commitish> 여기에서 <commitish>에는 원하는 변경 사항이 포함되어 있습니다. -n 또는 --no-commit 명령 줄 옵션은 충돌이없는 경우이 명령이 자동으로 새 커밋을 기록하지 못하게합니다.
  3. 병합하려는 파일을 제외한 모든 파일의 변경 사항을 마칩니다. 이 경우 git reset을 사용하십시오. 한편

git read-tree (힘내에서 병합을 수행하는 명령) 매뉴얼 당신이 원하는 것을 할 수있는 git merge-one-file 명령을 언급하고있다. 불행히도 매우 낮은 수준으로 보입니다. 정직하게도 나는 그것을 사용하려하지 않았습니다.

0

git cherry-pick은 게시 한 두 명령의 원 스톱 버전입니다. 이 도구가 존재한다면, 나는 – 같은 것을 할 git checkout의 호출이 있다고 생각하지 않는다. 어쨌든 도구의 의도 된 목적의 실제 스트레치처럼 보일 것이다.

+0

이 경우에는'git cherry-pick'을 적용 할 때마다 별도의 파일을 이해하지 못하기 때문에이 명령을 사용하여 단일 파일의 변경 사항 만 가져올 수는 없습니다. 'git cherry-pick --no-commit ... '을 호출 한 다음 그 단일 파일을 제외한 모든 변경 사항을 수동으로 unstage 할 수 있지만 이것은 지저분합니다. 아마도'git diff' +'git apply' 경로보다 덜 복잡하지만 아마도 ... – kostix

+0

diff/적용 예제 Robert도 개별 파일에 대한 변경 사항을 선택하지 않았으므로 cherry-pick이 수용 가능한 해결책이라고 생각했습니다. 커밋 내 개별 변경 사항을 체킹하는 것은 단지 두통을 요구하는 것입니다. 필자가 원하는 변경 사항이 실제로는 별도의 커밋에 포함되도록 지사 지점을 리베이스 할 것입니다. 그런 다음 커밋을 선택하십시오. – Grantovich

+0

'git diff .. --path/file.cpp> file.patch'를 할 수 있습니다. 그래서 네, 하나의 파일 만 패치 할 수 있습니다. –

관련 문제