2016-09-29 2 views
0

Git 리포지토리는 기본적으로 마스터 만 있고 모든 사람들이 작업중입니다. (재판하지 말고, 작은 것이지요.) 기본적으로 Rebase가 활성화되어 있습니다. AFAIK git-rebase는이 프로세스 동안 필요한 경우 날짜를 기준으로 커밋을 적용하고 MERGING 상태가되면 기록을 다시 작성합니다. 여기에서 일어나고있는 것입니다 무엇Git Rebase는 선형 히스토리를 생성하지 않습니다.

enter image description here enter image description here enter image description here

:하지만 한 가지 짜증나는 저와 팀이, 때로는 역사는 선형하지, 몇 가지 예제를 따라한다? 아니면 내가 어떻게 자식 rebase 작동 오해?

답변

2

기록은 날짜를 기반으로하지 않으며 근원 그래프를 기반으로합니다. 예를 들어, 역사는 다음과 같을 수 있습니다 :

    branchA 
        ↓ 
* -- * -- * -- * -- * 
     \ 
     * -- * -- * 
       ↑ 
       branchB 

*의 각각은 당신의 역사에 커밋 나타내지 만 실제 날짜는 그래프의 위치에 완전히 무관하다. 의는 (나중에 더 큰 숫자가 생성)은 생성 된 상대 시간을 표시하는 숫자 별을 교체하자

    branchA 
        ↓ 
1 -- 2 -- 4 -- 5 -- 8 
     \ 
     3 -- 6 -- 7 
       ↑ 
       branchB 

이 각 지점에 완벽하게 벌금과 (시간 기준) "선형"역사는 . branchA의 기록을 기록하면 8, 5, 4, 2, 1이됩니다. branchB의 경우 7, 6, 3, 2, 1이 표시됩니다. 당신이 branchAbranchB을 리베이스 경우

자, 힘내 branchB 그 커밋을 다시 작성하고 branchA에 적용됩니다. 다시 쓰는 동안 Git 은 기본적으로으로 작성 시간을 그대로 유지합니다 (그러나 커밋 시간은 현재 시간으로 재설정됩니다).

    branchA 
        ↓ 
1 -- 2 -- 4 -- 5 -- 8 -- 3' -- 6' -- 7' 
            ↑ 
            branchB 

이 (여기 '들이 원래의 것과 다른 커밋이 실제로 있음을 의미하지만, 그들은 같은 내용과 저자의 시간을 할) : 그래서 당신은 다음과 같은 결과를 얻을 것입니다.

로그를 branchB으로 보면 다음과 같이 표시됩니다. 7', 6', 3', 8, 5, 4, 2, 1. 그리고 그것은 정확히 "시간의 역설"이 나오는 곳입니다 : 완벽하게 선형의 역사가 있습니다 (그래프는이 섹션에서 선형입니다). 그러나 커밋은 반드시 원래 작성된 순서대로 수행되지는 않습니다.

Rebasing은 완전히 커밋을 재설정해서는 안되기 때문에 원래 작성자 정보 (누가했는지, 언제 작성했는지)가 그대로 유지됩니다.

관련 문제