Git의 리베이스로 베이스가 변경될 때 커밋 번호가 바뀌는 건 확인

6179 단어 SourceTreeGitHubGit

개요



Git을 사용하고 있고, 이해하기 어려운 "리베이스"에 대해.

develop 브랜치와 어느 시점의 develop에서 파생한 feature 브랜치(feature/dev_#50으로 했습니다)가 있다고 합니다.
develop이 커밋되어 앞으로 진행되어 버렸을 때에, 새로운 시점의 develop로부터의 파생으로서 feature/dev_#50을 리베이스 하는 장면이 있습니다.



이런 것입니다.

커밋 이력은 이전 커밋 번호를 유지한다는 Git의 성질에서 리베이스한 후의 커밋들(주로 5d6a09d 라는 것을 살펴 보겠습니다.

이전 준비


git init
echo "hello" >> Calc.java
echo "hello" >> Calc2.java
git add Calc.java && git add Calc2.java   && git commit -m 'initial'
git checkout -b develop && git checkout -b feature/dev_#50

지금 시점의 상태를 확인합니다.
$ git log --oneline --graph
* 39eca7c (HEAD -> feature/dev_#50, master, develop) initial
$

develop( ef3cd3b ) 에서 feature/dev_#50 이 분기되었습니다. SourceTree에서 보면 이렇습니다.


계속해서 feature/dev_#50에 2회 커밋해 봅니다.
git checkout feature/dev_#50
echo "hello from feature/dev_#50" >> Calc2.java
git commit -a -m '1. modified in dev_#50'

echo "hello from feature/dev_#50" >> Calc2.java
git commit -a -m '2. modified in dev_#50'

지금 시점의 상태를 확인합니다.
$ git log --oneline --graph
* ef3cd3b (HEAD -> feature/dev_#50) 2. modified in dev_#50
* 5d6a09d 1. modified in dev_#50
* 39eca7c (master, develop) initial
$

develop( 39eca7c )에서 파생된 feature/dev_#50은 현재 39eca7c를 가리키고 있습니다.

계속해서 develop에 하나 커밋합니다.
git checkout develop
echo "hello from develop" >> Calc.java
git commit -a -m 'modified in develop'

지금 시점의 상태를 확인합니다.
$ git log --oneline --graph
* f618196 (HEAD -> develop) modified in develop
* 39eca7c (master) initial
$
ef3cd3b를 가리키는 develop은 이제 39eca7c를 가리키고 있습니다. feature/dev_#50과의 관계를 보기 위해 SourceTree에서 살펴보면,,,


  • develop 은 f618196
  • feature/dev_#50 은 f618196

  • 를 가리키는 것을 그림에서도 알 수 있습니다.

    리베이스 해 보자.



    음, 리베이스에 관한 것입니다.
    리베이스는 이름에서 알 수 있듯이 처음 ef3cd3b를 가리키는 develop에서 파생 된 feature/dev_# 50을 현재 39eca7c를 가리키는 develop에서 파생되도록 전환합니다. 그림을 보면 (첫 번째 그림이지만)



    이런 일입니다. 그렇다면 커밋 로그는

    네 번째: f618196 (feature/dev_#50의 커밋 두 번째)
    세 번째: ef3cd3b (feature/dev_#50의 커밋 첫 번째)
    두 번째: 5d6a09d (지금 develop이 가리키는 커밋)
    첫 번째 : f618196
    가 되는 이미지입니다만, 3,4번째의 39eca7c
    시도하면 ...
    git checkout feature/dev_#50
    git rebase develop
    

    자, 지금 시점의 상태를 확인합니다.
    $  git log --oneline --graph
    * d227747 (HEAD -> feature/dev_#50) 2. modified in dev_#50
    * 503a3d3 1. modified in dev_#50
    * f618196 (develop) modified in develop
    * 39eca7c (master) initial
    $
    



    예상대로 되었습니다.

    리베이스는 파생원을 바꾸는 것이므로, 파생처의 커밋들은 늘어서, 신규 커밋으로서 애매하게 되는 것을 알았습니다. .

    미안해.

    관련 링크


  • SourceTree에서 병합 및 리베이스 수행
  • GitHub 병합 및 리베이스 정보
  • 좋은 웹페이지 즐겨찾기