ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [정리] rebase
    IT/Git 2024. 4. 2. 00:05

    출처 - unsplash.com

     

     

    git rebase에 대해서 알아보자.

     

    브랜치의 base 즉, parent 정보를 바꿔주는 기능

    -> 브랜치 간 '내가 바라보는 parent' 정보를 바꾼다.

    -> rebase 는 병합이 '아니라' base 를 변경해주는 과정임.

     

    와.. 적고 보니까 무슨 말인지 하나도 모르겠다..

     

     

    내가 이해한 바를 정리해보면, 

    기준이 되는 브랜치(여기서는 master 브랜치)에서 feature 브랜치를 생성한 이후

    master 브랜치에 추가 커밋 new1이 있는 경우, feature 브랜치의 기준점을 master 의 new1 로 변경하는 것이다.

    그럼으로써 feature 브랜치에 new1 내용이 반영되는 것이다.

    => 하나의 브랜치에서 변경된 내용을 다른 브랜치에 적용하는 것...

    -> 그러면.. pull 이랑은 또 뭐가 다른거지? pull 은 서버에 있지만 로컬에 없는 데이터를 가져와서 저장 && merge 하는 것인데. rebase랑 뭐가 다를까...;;

     


     

    자, 실습해보자.

     

    1. Git 저장소 생성 (특정 디렉토리에서 아래 명령어 수행)

    $ git init

     

     

    2. 최초 파일 생성 및 add, commit

    $ echo "init" > init.txt
    $ git add init.txt
    $ git commit -m "init"

     

    3. 로그 확인

    $ git log
    commit c91f0991a4211c3068ef16e4400ad06df33668fc (HEAD -> master)
    Author: 
    Date:   Tue Apr 2 00:06:57 2024 +0900
    
        init

     

    4. rb 브랜치 생성

    $ git checkout -b rb
    Switched to a new branch 'rb'

     

     

    자, 이제 작업환경 (rb) 에서 2번 커밋을 진행할꺼다.

     

    5. rb1.txt, rb2.txt 2개 파일 생성, add&commit

    $ echo "1" > rb1.txt
    $ git add * && git commit -m "rb1"
    warning: in the working copy of 'rb1.txt', LF will be replaced by CRLF the next time Git touches it
    [rb 6e4981f] rb1
     1 file changed, 1 insertion(+)
     create mode 100644 rb1.txt
    
    $ echo "2" > rb2.txt
    $ git add * && git commit -m "rb2"
    warning: in the working copy of 'rb2.txt', LF will be replaced by CRLF the next time Git touches it
    [rb 19921e7] rb2
     1 file changed, 1 insertion(+)
     create mode 100644 rb2.txt

     

    6. rb 브랜치 로그 확인

    - rb 브랜치는 init 후 2개 커밋이 있기 때문에 총 3개 로그가 노출될 것임

    $ git log
    commit 19921e7a94c90bef8ae7069fb6a358e7ebcd35fb (HEAD -> rb)
    Author: 
    Date:   Tue Apr 2 00:12:26 2024 +0900
    
        rb2
    
    commit 6e4981f0c90e52d3e3f4178c8d71c46ab2d5b9f5
    Author: 
    Date:   Tue Apr 2 00:12:09 2024 +0900
    
        rb1
    
    commit c91f0991a4211c3068ef16e4400ad06df33668fc (master)
    Author: 
    Date:   Tue Apr 2 00:06:57 2024 +0900
    
        init

     

    7. 이제 master 브랜치에 새로 커밋을 하기 위해서 master 브랜치로 변경

    $ git checkout master

     

    8. rb-master1.txt 파일 생성, add&commit

    $ echo "master" > rb-master1.txt
    $ git add * && git commit -m "rb-master1"

     

    9. master 브랜치 로그 확인

    - init 이후 rb-master1 이 커밋되었으므로 총 2개의 로그 확인

    $ git log
    commit 6531a461d227ac8ba0a196bab56e341c2aedab82 (HEAD -> master)
    Author: 
    Date:   Tue Apr 2 00:16:17 2024 +0900
    
        rb-master1
    
    commit c91f0991a4211c3068ef16e4400ad06df33668fc
    Author: 
    Date:   Tue Apr 2 00:06:57 2024 +0900
    
        init

     

     

    rebase 수행은 바뀌어야 하는 쪽인 branch에서 수행되어야 한다. 따라서 브랜치를 다시 rb 브랜치로 변경함

     

    10. 브랜치 변경

    $ git checkout rb
    Switched to branch 'rb'

     

    11. rebase 실행

    $ git rebase master
    Successfully rebased and updated refs/heads/rb.

     

    12. rb 브랜치 로그 확인

    - rebase 수행 후 master 브랜치의 rb-master1 커밋이 추가되어 노출

    $ git log
    commit eb9c42e02a77ed6f35f77f37abbb26688d6bcce5 (HEAD -> rb)
    Author: 
    Date:   Tue Apr 2 00:12:26 2024 +0900
    
        rb2
    
    commit b349f5116439d75f13200317bbc15f772ed62140
    Author: 
    Date:   Tue Apr 2 00:12:09 2024 +0900
    
        rb1
    
    commit 6531a461d227ac8ba0a196bab56e341c2aedab82 (master)
    Author: 
    Date:   Tue Apr 2 00:16:17 2024 +0900
    
        rb-master1
    
    commit c91f0991a4211c3068ef16e4400ad06df33668fc
    Author: 
    Date:   Tue Apr 2 00:06:57 2024 +0900
    
        init

     

     

     

     

     

     

     

    강의 출처

    https://youtu.be/6tBlwyOJ2Mo?si=wlg-F29N_0hHJwCt 

     

     

     

    'IT > Git' 카테고리의 다른 글

    [정리] cherry-pick  (0) 2024.04.01
    불필요한 파일 제외하고 push하자! - .gitignore  (0) 2020.11.18
    Git, Github  (0) 2020.11.16

    댓글

Designed by Tistory.