2014-02-08 6 views
0

현재 GIT를 사용하는 파이썬 프로젝트에서 작업 중이며 master와 release 브랜치가 두 개 있습니다. 새로운 기능은 마스터 브랜치에 커밋되며 버그 수정은 릴리스 브랜치에만 적용됩니다.GIT에서 하나의 브랜치에서 다른 브랜치로 커밋을 대체하는 방법

제 질문은 버그 수정을 릴리스 분기에서 master 분기로 마이그레이션하는 가장 좋은 방법입니다.

내가 생각할 수있는 두 가지 방법은 리베이스 (rebase)를하는 것이었지만, 실제로는 잘 돌아 가지 않았습니다. 나가 생각한 다른 방법은 cherrypicks를하기위한 것이었다 그러나 이것은 지루할 것이다. 내 동료는 내가 다른 지점으로 마스터 브랜치의 근원을 바꿀 수 있다고 말했지만 실제로 이것이 그가 의미하는 바를 알지 못한다.

나는 어떤 대안을 사용할 수 있는지, 그리고이를 수행하는 현재의 최선의 실행/확실한 방법이 무엇인지 알고 싶습니다. 명령을 게시하거나 몇 가지 예를 지적 할 수 있으면 감사하겠습니다. REBASE을하는 미리

덕분에, 탐색

답변

1

일반적으로 릴리스 분기를 개발 분기에 병합합니다.

일반적인 워크 플로에서 릴리스 분기는 개발 분기에서 분기됩니다. 설명했듯이 새로운 개발 커밋이 개발 분기에 추가되고 핫픽스가 릴리스 분기에 추가됩니다. 그런 다음 어떤 지점에서 릴리스 분기에서 개발 분기를 병합하게됩니다. 즉, 개발 분기가 새로운 병합 커밋을 얻고 개발 분기 헤드 (마스터)가 진행하면서 릴리스 분기 헤드가 그대로 유지됩니다.

$ git checkout master 
$ git merge -m "Merge in hotfix for 'blah blah blah' back into develop" release 

개발 분기에는 새로운 개발 커밋과 핫픽스가 모두 포함되며, 릴리스 분기에는 여전히 핫픽스 만 포함됩니다. 릴리스 분기에 계속해서 핫픽스를 추가하고 개발 지점을 병합하도록 할 수 있습니다 (개발 분기에 대한 개발 작업을 계속 커밋 할 수 있음).

이 방법 당신은 당신이 무언가를하지 않는 한 특별히 특정 제외 (핫픽스를 개발하기 위해 다시 머지하는 선택할 수 없습니다 :

gitflow 사진이의 시각화를 가지고 커밋). 한 브랜치가 다른 브랜치에서 병합 될 때 첫 번째 브랜치는 첫 번째 브랜치가 아직 가지고 있지 않은 두 번째 브랜치 (두 번째 브랜치의 병합 지점부터)에서 모든 커밋을 효과적으로 가져옵니다. 즉 모든 브랜치가 이전에 이미 병합되지 않은 개발에서 파산 한 후 릴리스 지점. 릴리스에서 2 개의 핫픽스를 작성한 경우 첫 번째 버전을 병합하지 않았지만 두 번째 핫픽스 이후에 릴리스 분기의 끝에 병합 병합을 선택하면 개발시 두 가지 핫픽스를 모두 받게됩니다.

-

당신은 개발 지점에서 원하는하지 않을 수있는 유일한 핫픽스 변경 버전 번호를 부딪 치는 등의 변경입니다. 병합 중에 (또는 후에)이를 수정해야합니다. 그렇지 않으면 릴리스 분기에서 별도의 커밋으로 이러한 변경 사항을 분리하여 별도로 커밋을 개발 분기로 "병합"할 수 있습니다. 즉 make 개발 지점은 실제로 커밋의 "diffs"를 통합하지 않고 커밋을 이미 가지고 있다고 생각합니다. 당신이 릴리스 브랜치에서 버그 수정을 한 후 문서의 버전 번호를 업데이트 할 경우

https://stackoverflow.com/a/19794987/11296

예를 들어,/별도의 코드는 다음 병합 (마지막 커밋) 커밋 : 나는 대략 여기 과정을 설명 이 같은 개발 지점에 :

+1

자세한 답변 해 주셔서 감사합니다. 지금해야 할 일에 대해 더 명확한 그림이 있다고 생각합니다. – navanitachora

0

기본적으로 행에 체리 픽의 무리를하고있다 - 즉 REBASE 스크립트 후드 부르는입니다.

나는 당신을 이해하는 경우, 마스터와 릴리스가 동일한 공통 조상 지점 R이있을 수도 있고 없을 수도 있습니다. 단지 중요한 수정이 릴리스에 추가하는 동안 그 후, 기능 및 수정, 마스터에 추가되었습니다

R <- feat <- feat <- fix <- feat <- fix <- feat [master] 
\ 
    \ 
    <- fix <- fix <- fix [release] 

를이 경우, 당신은 마스터에 릴리스 지점의 대부분을 리베이스하려면 (이있을 수있다 "공황 생산 문제를 해결하기 위해 만든 "수정본"을 보관하고 싶지는 않습니다.

Rebase가이를위한 방법입니다. 리베이스 (rebase)에 관한 git book 장을보고 여러분이 말하는 것을 얻을 때까지 계속 읽으십시오. (http://git-scm.com/book/en/Git-Branching-Rebasing)

특히 자동 리베이스 및 대화식 리베이스에 대해 알고 싶습니다. 대화 형 리베이스를 사용하면 이동하지 않을 변경 사항을 "드롭"할 수 있습니다. 그것이 "공황 문제"해결을위한 해결책입니다.

+0

감사합니다. 나는 아마도 새로운 복제본에서 다시 rebase를 시도해야하고 작동하도록 만들 수 있는지 확인해야합니다. – navanitachora

관련 문제