git 브랜치를 master와 동기화하는 방법
git이 머리를 쓰는 순간, 나는 다음에 대한 최상의 해결책을 제시 할 수 없습니다.
하나는 master 라고 하고 다른 하나는 mobiledevicesupport 라고 합니다 . 모바일 장치 지원이 안정적 일 때마다 모바일 장치 지원을 마스터 브랜치와 병합 / 동기화되는 연속 분기로 유지하고 싶습니다. 그러면 모바일 장치 지원에서 마스터로 변경 사항이 병합되지만 마스터에서 모든 변경 사항을 모바일 장치 지원으로 가져와 분기가 계속 작동하고 기능이 개선되거나 수정 될 수 있습니다. 중앙 저장소 및 여러 개발자와 함께 작업해야합니다.
다른 사람들이 사용하는 유사한 워크 플로의 예를 보거나이 아이디어가 어리 석다면 다른 옵션을 고려해야합니다. 현재 워크 플로우는 괜찮은 것처럼 보이지만 git이 어떻게 이런 식으로 작동하는지 알 수 없습니다.
감사합니다.
업데이트 1 : master를 mobiledevicesupport로, mobiledevice support를 master로 병합하려는 경우 두 지점에서 복제 커밋을 얻습니까? 또는 분기 A에서 분기 B로 최신 변경 사항을 가져 와서 병합 커밋 C를 분기 B로 추가했는지 확인하기에 충분히 똑똑합니다. 그리고 분기 B에서 분기 A로 최신 변경 사항을 가져 와서 병합 커밋 D를 분기에 추가했습니다. ㅏ?
이미지를 게시하려고했지만 평판이 충분하지 않기 때문에 다음 그림이 필요할 것 같습니다. 지속적으로 실행되는 두 개의 브랜치는 종종 양방향으로 진행합니다. 내가 확실하지 않은 핵심은 git이 커밋을 재생하는 방법이며 병합시 다른 브랜치의 커밋으로 브랜치를 채울지 또는 깨끗하게 유지할 것입니다. 나는 전에 rebase를 사용했지만 지점을 끝내고 모든 커밋을 마스터에 넣은 것 같습니다. 또는 잘못했습니다. 지금까지 도움을 주셔서 감사합니다.
master
A--B--C-----H--I--J--M--N
\ / \
mobile \ / \
D--E--F--G--------K--L
네 그냥하세요
git checkout master
git pull
git checkout mobiledevicesupport
git merge master
모바일 장치 지원을 마스터와 동기화 유지
그런 다음 모바일 장치 지원을 마스터에 넣을 준비가되면 먼저 위와 같이 마스터에 병합 한 다음 ...
git checkout master
git merge mobiledevicesupport
git push origin master
그리고 그게 다야.
여기서 mobilexxx는 아직 메인 지점으로 갈 준비가되지 않은 토픽 브랜치입니다. 따라서 모바일 장치 지원이 좋은 곳에서만 마스터로 병합하십시오.
마스터에서 작업 지점으로 변경 사항을 가져 오려면을 수행하십시오 git rebase <remote>/master
. 충돌이있는 경우 그들을 해결하십시오.
작업 지점이 준비되면 다시 기지를 만든 다음을 수행하십시오 git push <remote> HEAD:master
. 그러면 원격 (중앙 저장소)의 마스터 분기가 업데이트됩니다.
concept47의 접근 방식이 올바른 방법이지만 커밋 기록을 명확하게 유지하려면 --no-ff 옵션과 병합하는 것이 좋습니다.
git checkout develop
git pull --rebase
git checkout NewFeatureBranch
git merge --no-ff master
네 당신의 접근 방식에 동의합니다. 모바일 장치 지원을 마스터로 병합하려면 다음을 사용할 수 있습니다
git checkout master
git pull origin master //Get all latest commits of master branch
git merge mobiledevicesupport
마찬가지로 모바일 장치 지원에서 마스터를 병합 할 수도 있습니다.
Q. 교차 병합이 문제가되는지 여부입니다.
A. 그것은 마지막으로 동기화 된 시점부터 모바일 * 지점 및 마스터 지점에서 이루어진 커밋에 달려 있습니다. 이 예제를 보자 : 마지막 동기화 후,이 분기들에 다음 커밋이 발생한다
Master branch: A -> B -> C [where A,B,C are commits]
Mobile branch: D -> E
이제 커밋 B가 파일 a.txt를 약간 변경하고 커밋 D도 a.txt를 약간 변경했다고 가정합니다. 이제 병합 작업의 각 영향에 대해 살펴 보겠습니다.
git checkout master //Switches to master branch
git pull // Get the commits you don't have. May be your fellow workers have made them.
git merge mobiledevicesupport // It will try to add D and E in master branch.
이제 두 가지 유형의 병합이 가능합니다
- 빨리 감기 병합
- 진정한 병합 (수동 노력 필요)
Git은 먼저 FF 병합을 시도하고 충돌이 git에 의해 해결되지 않는 것을 발견하면 시도합니다. 병합에 실패하고 병합을 요청합니다. 이 경우 a.txt의 충돌을 해결하는 새로운 커밋이 발생합니다.
따라서 결론은 교차 병합은 문제가 아니며 궁극적으로 수행해야하며 동기화가 의미합니다. 생산중인 작업을 수행하기 전에 분기 병합에서 손을 더 럽히십시오.
올바른 방향으로 생각하고 있습니다. 모바일 장치 지원이있는 마스터를 지속적으로 병합하고 모바일 장치 지원이 안정적인 경우 모바일 장치 지원을 마스터와 병합하십시오. 각 개발자는 자신의 지점을 가지고 있으며 자신의 역할에 따라 마스터 또는 모바일 장치 지원과 통합 할 수 있습니다.
git merge를 통해 허용 된 답변은 작업을 완료하지만 지저분한 커밋 조직을 남깁니다. 다음 단계를 통해 올바른 방법이 '리베이스'되어야합니다 (PR 전에 최종 푸시를 수행하기 전에 기능 분기를 sycn에 유지하려는 경우) ).
git fetch
기능 지점에서 1 (작업중인 기능 지점이 최신으로 업데이트되었는지 확인)
2 git rebase origin/develop
3 충돌이 발생하면 하나씩 해결하십시오.
4 git rebase --continue
모든 충돌이 해결되면 사용
5 git push --force
참고 URL : https://stackoverflow.com/questions/16329776/how-to-keep-a-git-branch-in-sync-with-master
'IT story' 카테고리의 다른 글
C ++에서 그래픽 사용자 인터페이스를 어떻게 구축합니까? (0) | 2020.04.08 |
---|---|
테이블이 존재하지 않는 경우에만 SQLite로 테이블 작성 (0) | 2020.04.08 |
팬더 DataFrame이 비어 있는지 확인하는 방법은 무엇입니까? (0) | 2020.04.08 |
프로그래밍에서 "원자"는 무엇을 의미합니까? (0) | 2020.04.08 |
CSS를 사용하여 글꼴을 굵게 만드는 방법은 무엇입니까? (0) | 2020.04.08 |