developer tip

전체 분기가 아닌 git 부분 병합

optionbox 2021. 1. 8. 08:09
반응형

전체 분기가 아닌 git 부분 병합


Git 에서 병합에 대한 몇 가지 트릭에 대해 읽었습니다 . 공용 및 개인 분기를 병합하면서 분기 와 다른 파일 모두에서 특정 파일을 그대로 유지 하고 해결책을 찾지 못했습니다.

제 경우에는 반대의 병합 전략을해야한다고 생각합니다. 병렬 개발에서는 임의의 분기에서 일부 파일을 동일하게 유지해야합니다. 다른 쪽에서는 스쿼시 또는 커밋 없음 병합을 원하지 않지만 차이점은 중요하며 테스트 분기의 현재 상태를 깨뜨릴 수 있습니다.

내가 원하는 것

git checkout testing

git merge config.xml -b development 또는 git merge config\*.xml -b development

나는 이것이 git merge-files ...명령과 같지만 두 번째 파일은 파일 시스템이 아닌 지점에서 전달됩니다. 가능합니까? 또는 일종의 해결 방법이 있습니까? 서브 모듈? 속성?

감사


할 수있는 일이 몇 가지 있습니다.

한, 당신은 할 수 체리 - 선택 단 하나의 커밋 적용 당신이 원하는 변화를. 예를 들어, 변경이있을 경우에만 터치는 것을 config.xml, 당신은 그것을 벚꽃 - 선택할 수 있습니다

$ git cherry-pick $COMMIT_ID_YOU_WANT

config.xml개발 브랜치에서 가져올 수도 있습니다 .

$ git checkout testing
$ git checkout development -- config.xml

그러면 config.xml개발 브랜치에 있는 것과 동일한 버전을 얻을 수 있지만 파일 변경 내역을 가져 오지는 않습니다.


기본적으로 다음에서 모두 읽을 수 있습니다 : http://www.gelato.unsw.edu.au/archives/git/0701/37964.html

간단히 말해, 특정 범위의 커밋 (단일 커밋 일 수도 있음)에 의해 수행 된 변경 사항을 파일의 하위 집합에만 적용하려면 다음을 수행하십시오.

git diff commit1..commit2 filepattern | git apply --index && git commit

다음은 부분 병합의 위험을 설명하고 올바른 방법을 보여주는 단계별 문서가있는 저장소입니다.

https://gitlab.com/bimlas/learning-by-testing-git-partial-merge/tree/doc

TL; DR :

병합은 그 자체가되어야합니다 : 가지의 결합. 모든 파일을 병합하지 않고 병합 커밋을 수행하고 나중에 동일한 분기를 병합하려고 시도하는 경우 Git은 첫 번째 병합 커밋에서 모든 것을 병합했다고 생각하므로 이전 커밋은 중요하지 않으며 병합되지 않은 변경 사항을 건너 뜁니다. 첫 번째 병합 전에.

checkout한 분기에서 다른 분기로 파일을 복사하는 데 사용 합니다.

git checkout BRANCH -- FILE
git commit -m "Partial merge"

git-tree에서 직접 선택한 파일에 대해 병합 할 수 있습니다.
내가 제안하는 것은 다음과 같은 것을하는 것입니다.
$ git ls-tree development -- config.xml
$ git show <blob-hash> > config.xml.development

그런 다음 공통 기반을 얻으십시오.

$ git ls-tree $(git merge-base HEAD development) -- config.xml
$ git show <blob-hash> > config.xml.base

그리고 마지막으로 :

$ git merge-file config.xml config.xml.base config.xml.development

그래도 테스트하지 않았습니다.

zsh와 같은 셸을 사용하면 다음을 사용하여 blob을 임시 파일에 저장하지 않아도됩니다.

$ git merge-file config.xml =(git show <base-blob-hash>) =(git show <dev-blob-hash>)

참조 URL : https://stackoverflow.com/questions/4315948/git-partial-merge-not-whole-branch

반응형