2014-11-19 3 views
1

분기가 병합 된 후 기능 분기에 대한 소스 분기 커밋을 어떻게 찾을 수 있습니까?병합 후 지형지 물을 다시 포팅하는 방법은 무엇입니까?

마스터 분기와 분기를 사용하여 git 워크 플로를 고려하십시오. 마스터는 다음 릴리스로 계속 진행합니다. 버그 수정은 릴리스 분기에 적용되지만 마스터 분기로 다시 포팅해야합니다.

기능 분기는 릴리스 분기에서 만들어 검토하고 릴리스 분기에 병합합니다. 마스터에 수정 사항을 적용하려면 기능 분기를 마스터 분기에 리베이스해야합니다. 그러나

git rebase --onto master release 

결과는 0입니다. 릴리스가 전방으로 이동하고 헤드

git merge-base HEAD release 

결과 (병합베이스가 REBASE 시작점을 결정하기 위해 내부적으로 사용되는)로이 이해된다. 따라서 rebase는 아무 것도 리베이스하지 않습니다. 유용하지 않다.

git log를 사용하여 분기 지점이 어디에 있는지 판단 할 수 있지만 분기점이 가장 많이있는 지점을 더 잘 알고 싶습니다. 목표는 이러한 일반적인 상황에 대한 자동화입니다.

간단한 예를 들어 트리 (나무 드물게이 간단하다 : :).

* 5caf21e (release) Merge pull request #689 from ... 
|\ 
| * 9f0f210 Bug 1123: Fix bug 
| * bb6b3fa Bug 1123: Reproduce bug 
* 077afe0 Merge pull request #688 from ... 
|\ 
| * e750974 (feature/bug1154) Bug 1154: Fix bug 
| * 98194b9 Bug 1154: Reproduce bug 
* cabb4d2 Merge pull request #681 ... 
|\ 
| * a10c992 Bug 1110: Bug fix 
|/
* 7caacee Merge pull request #673 ... 

내가 마스터 지점에 e750974에서 기능/bug1154을 리베이스하고 싶다. 이 분기가 병합되고 릴리스 분기도 이동했습니다.

git rebase --onto master release feature/bug1154 

결과가 적용되지 않습니다.

은 정말 자식 명령을 사용하여 cabb4d2

git rebase --onto master cabb4d2 feature/bug1154 

은 어떻게 찾을 수 있습니까 싶지? 직접 git log를 해석 할 필요없이 자동화되고 다른 사람들에게 쉽게 설명 될 수있는 것.

+0

잠깐, 'cabb4d2'는 그 그래프에서'feature/bug1154'의 조상이 되었습니까? '077afe0'는 커밋을 어디에 지형지 물이 지사로 합쳐지는 지점입니까? – Useless

+0

@Useless correct. 이것은'git log --oneline --graph --decorate' ('git ll'에 대한 나의 별칭)의 결과가 될 그래프입니다. –

+0

예제 트리에서 마스터가 가리키는 커밋은 무엇입니까? 아마 7caacee의 조상이나 5caf21e의 자손일까요? 당신은 "마스터는 다음 릴리스로 계속 나아 간다"고 말합니다. 마스터 란 향후 릴리스에서 지속적으로 개발 될 예정이며 릴리스 지점은 버그 수정 및 유지 관리입니까? 그렇다면, 지사는 릴리스 지점에서 무엇을하고 있습니까? – gatkin

답변

0

전 상황을 완전히 이해하지 못했습니다 (내 의견 참조).

기능을 다시 이식하는 방법은 무엇입니까?

커밋 또는 2를 백 포트하는 일반적인 명령은 git cherry-pick입니다. 하지만 워크 플로를 기반으로 생각 하듯이 그것이 원하는 것이라고 생각하지 않습니다.

버그 수정은 릴리스 브랜치에 적용되지만, 마스터 분기가 작업이 향후 릴리스에 대해 수행 및 릴리스 분기/유지 보수입니다되는 경우 다시 마스터 지점

에 이식해야 버그 수정, 그건 단지 병합입니다. 사람들이 각 버그를 풀어서 해결할 때 각 버그를 합친 것으로 가정하면 버그 1123을 수정 한 사람이 이미 병합했을 수 있습니다. 1154

분기 후에 기능 분기에 대한 원본 분기 커밋을 어떻게 찾을 수 있습니까? 합병 된거야?

기술적으로 Git은 분기가 병합되기 전이라도 어디서나 기록하지 않습니다. git merge-base --fork-point 명령을 사용하면 로컬 reflog에 충분한 기록이있는 경우에만이를 추론 할 수 있습니다.

어떻게하면 git 명령을 사용하여 cabb4d2를 찾을 수 있습니까? 당신이 병합 포인트가 다시 발걸음을 내 디뎌 다음 git merge-base 077afe0^1 077afe0^2

, 077afe0이었다 알고 있다면

, 그것은 기능/bug1154에 대해 특별한 무엇 질문에서 명확하지 않다. 1110과 1123을위한 어떤 과정이 있었는지, 그것은 1154를 위해 행해져야만합니다. 그리고 마스터가 5caf23e의 자손을 가리키고 있다면, 그것은 이미 병합되었습니다.

+0

간단합니다. 고마워요. –

+0

복잡성이 너무 높아져서 릴리스 분기에서 마스터 분기로 병합을 중단했습니다. 또한 병합 시점을 결정하는 것도 문제가되었습니다. 좋은 답변 주셔서 감사합니다. –

+0

@BillDoor 환영합니다. 기능 분기가 릴리스 분기에 두 번 이상 병합되었거나 교차 병합이 있었던 경우 마지막 질문에 대한 대답이 훨씬 더 어려워집니다. 자세한 내용은 [이 질문] (http://stackoverflow.com/questions/1527234/finding-a-branch-point-with-git)을 참조하십시오. 'merge-base'에'--choke-point' 옵션 등이 있으면 좋을 것입니다. – gatkin

관련 문제