2013-10-22 1 views
14

부분을 git로 선택적으로 병합하려고합니다.선택적으로 git 파일의 * 부분 *을 병합 하시겠습니까?

나는 하나의 커밋을 분리하여 마스터라고 부르며 변경된 두 개의 브랜치를 가지고있다. 마스터를 변경하면 마스터가 빨리 감기가됩니다.

그러나 한 파일 내에서 여러 부분을 마스터로 변경하고 싶습니다.

깨끗한 방법이 있습니까? 예 : 각각의 변경을하기 전에 묻는 git? 아니면 내가 직접 손으로 붙인거야? (아니 세계의 끝,하지만,하고 싶지 않은 것 - 예 -이는 내 인생에 대한 계획을 피할 수 - 같은 삶입니다.)

답변

11

이 시도 :

git merge --no-ff --no-commit changed # Merge in 'changed' but don't commit 
git reset <path/to/your/file>   # Reset the stage state but not file 
git add -i <path/to/your/file>   # Start adding in interactive mode 

(Git will prompt you for each hunk; you can split hunks up if necessary.) 

git commit        # Finally commit the merge with only 
             # the bits you chose to stage. 

그러나 이렇게하면 Git이 파일이 완전히 병합되었다고 생각하게되므로 다른 사람이 같은 분기에서 다시 병합 할 경우 해당 커밋의 다른 변경 사항은 병합되지 않습니다. 또는 당신이 원하는 것이 아닐 수도 있습니다.

git add 대화 형 모드에서 다양한 옵션의 의미에 대한 도움이 필요한 경우 "대화식 모드"섹션의 git help add 출력을 참조하십시오.

+0

대화식 모드에서 "add -p"를 "-i"를 추가하도록 변경했지만 광고 된 것과 같이 작동합니다. 나는 자식 - 병합을 대화 형으로 직접 지원하여 hunk와 함께 작업하기를 바란다. – lnmaurer

+0

네, 여기 mergetool을 사용할 수 없습니다. 별도로, 한 번에 두 개 이상의 파일을 수행 할 수있는 방법이 있습니까? 아니면 그 일을 만들기 위해 루프를 작성해야합니까? – Dan