2012-01-07 3 views
2

현재 분기의 기존 파일 만 업데이트하는 '병합'을 수행 할 수 있습니까?기존 파일 만 '병합'

예를 들어 branch1 :/file1,/x/file2,/file3이 있습니다. 그리고 branch2 :/file1,/x/file2,/z/file4. 두 번째 지점에서 file1과 file2 파일을 먼저 업데이트하려고합니다.

솔루션으로 나는 그 파일들에 대해 branch1에 별도의 커밋을 만들고 두 번째 브랜치에서 chery-pick을 사용하는 것을 보았다.

UPD : 덕분에 @fge하기 위해, 나는 솔루션 (내가 기대했던대로 그렇게 간단하지) 것을 발견했습니다

git co branch2 
git co branch1 -- ./ 
git reset ./ 
git ci -a 
git clean -f 
+2

여기서 실제로 수행하려고하는 것에 대해 자세히 설명하고 싶을 수 있습니다. 이 두 가지 수명이 긴 지점이 있습니까? 이처럼 많은 병합 작업을해야합니까? 원하지 않는 파일들이 모두 하나의 디렉토리에 있고, 응집력있는 것을 나타내는가? 언젠가는 존재하지 않는 파일들과 그 파일들에 대한 변경 사항을 나중에 원하겠습니까? 그 파일들은 현재 브랜치에 존재 했습니까? – Cascabel

+0

git 명령을 써주실 수 있습니까? 나는 "co"가 "checkout"을 의미하지만 "ci"가 의미하는 것을 알아낼 수 없다는 것을 알고 있습니다. 감사. – Andrei

+0

여기에 git (.gitconfig)의 몇 가지 바로 가기가 있습니다. https://githowto.com/aliases. 그래서 "ci"는 내가 잘못하지 않았다면 "커밋"을 의미합니다. – Andrei

답변

1

당신은 같은 진행할 수 있습니다 동안 branch2에 :

git checkout branch1 -- file1 x/file2 

그런 다음 git add 수정 된 파일 및 결과를 커밋하십시오.

branch1의 커밋 메시지를 갖고 싶으면 git commit -c branch1으로 커밋 할 수 있습니다.

branch1은 실제로 refspec입니다. git의 브랜치는 커밋 일 뿐이지 만, 커밋은 부모와의 링크가 있으므로 사실상 "분기"입니다.

+0

병합으로 표시하지 않습니다. –

+0

'병합'은 따옴표로 묶었습니다. 그러므로 나의 해결책. – fge

+0

그건 내가 원하는 것이 아니지만, 가장 쉬운 방법 일 것입니다. 이 방법은 파일의 충돌을 해결하지 않으며 필요한 모든 파일을 나열해야합니다. Bash 루프와 ls가 도움이 될 수 있습니다. – prcu

1

정상적으로 병합을 진행하십시오. 다음으로, 즉 NW 추가 파일을 삭제하여 원하는 모양으로 커밋 수정 : 이제 병합 COMIT (2 부모가 정의 커밋)가

git merge other_branch 
rm file another_file #etc 
git add -A 
git commit --amend -C HEAD 

.

git branch --contains 

과 같은 명령이 올바르게 작동합니다. 적절한 병합을 원하면이 작업을 수행하십시오.

+0

이렇게하면 두 번째 분기에서 원치 않는 커밋/변경이 발생할 수 있습니다. OP는 다른 브랜치, 즉 파일 세트에서 _ 전체 변경 사항을 가져오고 싶다는 말은하지 않았습니다. – fge

+0

OP가 그것을 인식하지 못하더라도 병합으로 표시하는 것은 위험 할 수 있습니다. 병합을 수행 한 다음 병합 커밋의 모든 변경 사항을 실제로 포함하지 않도록 작업 내용을 다시 작성하면 나중 병합으로 나머지 변경 내용을 절대 선택하지 않습니다. – Cascabel

+0

맞아, fge. 결과가 일반적인 병합이 아닙니다. 이 작업 후에 두 가지 다른 커밋이 있습니다. 그래서 나는 '병합'을 따옴표로 썼다. – prcu