전체 분기가 아닌 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
'developer tip' 카테고리의 다른 글
웹 개발에 대한 기본적이지만 중요한 질문이 있습니까? (0) | 2021.01.08 |
---|---|
여러 줄 셀로 테이블을 코딩하는 방법 (0) | 2021.01.08 |
JavaScript로 옵션 텍스트 / 값 얻기 (0) | 2021.01.08 |
작업 복사본을 수정하지 않고 Git 브랜치를 리베이스 할 수 있습니까? (0) | 2021.01.08 |
파이썬 : 함수에 대한 정보를 얻는 방법? (0) | 2021.01.08 |