2013-03-29 1 views
2

브랜치의 리베이스를 "전파"할 수 있는지 궁금합니다. 의는 다음 설치를 고려해 보자 : branchB이 생성 된 후 무슨 일이 있었 branchA에 약간의 변화가있을 경우Git : 동일한 루트의 다른 브랜치에 "전파"리베이스

branchA *-*-*-*-*-*-<*> 
       \ 
     branchB *-*-*-* 
         \ 
       branchC *-*-*-* 

이 branchB의 REBASE이 필요할 수 있습니다. 그러나 branchB를 rebase하면 커밋 < *에서 시작하여 branchC가 자동으로 업데이트되지 않습니다.

이 조상 분기가 리베이스 될 때 (즉, 리베이스를 "전파"할 때) 공통 조상을 갖는 브랜치를 자동으로 리베이스하는 방법이 있다면 알고 계십니까?

미리 감사드립니다.

+0

git 브랜치는 커밋을 가리키는 포인터에 불과합니다. 따라서 부모 분기가 리베이스 될 때 모든 자식 분기를 자동으로 rebase (재 할당)하는 옵션이 git에 있음을 알 수 없습니다. 스크립트를 사용하는 것이 가능할 수도 있지만. – Tuxdude

+0

고마워! 내가 너를 올바르게 이해했다면 Git 가지가있는 나무 같은 구조가 없다. 맞습니까? – Tomek

+2

기본적으로. git의 커밋은 부모를 가리키며 트리 구조를 만들 수 있습니다. 하지만 git의 한 분기는 커밋을 가리키는 포인터 일뿐입니다. 지점에서 지점 커밋이 가리키는 이전 커밋에 도달 할 수 있습니다. 그러나 branchB는 branchC를 찾을 수 없습니다. –

답변

2

아니요, 자식에는 그 기능이 없습니다. 그러나 당신은 그것을 스스로 할 수 있습니다. Rebase branchC을 리베이스하고, 그 히스토리를보고 branchB과 일치하는 커밋을 찾습니다. 그 SHA 참고 실행 : 당신이 출판 역사를 다시는 안하고 로컬 게시되지 않은 역사는 보통 직선 및 분지 쇄 같이

git branch -f branchB *newSHA* 

이 같은 상황은, 매우 드문해야한다.

+0

고맙습니다. 나는 rebase --onto 명령을 사용하여 그것을 달성 할 수 있었다. 감사! – Tomek

+0

사실 나는 관련된 질문이 있습니다. 하나의 브랜치를 다른 브랜치와 병합 할 때 "메인"브랜치를 리베이스 할 때마다 병합 된 브랜치를 리베이스해야합니까? 다른 말로하면 - 불필요한 데이터베이스를 막기 위해서 다른 브랜치에 병합 된 브랜치를 항상 삭제해야합니까? – Tomek

+0

리베이스 및 병합을 함께 사용하지 마십시오! Rebasing 병합 끔찍한 혼란을 일으킬 것입니다. 그래서 귀하의 질문에 대답 : 심지어 거기에 가지 마세요 :). – Chronial