Git,  Programming

[Git] Rebase 사용법

Git에서 rebase는 주로 merge를 진행 할 때 사용되지만, 그 외에도 commit log 수정 또는 삭제에도 사용된다.

우선 Example로 git commit log를 보면 다음과 같다.

$  git reflog
05998ac HEAD@{0}: rebase -i (finish): returning to refs/heads/master
05998ac HEAD@{1}: checkout: moving from master to 05998ac
05998ac HEAD@{2}: commit: Delete raw data
2576b22 HEAD@{3}: commit: Implement to plot address variaion by parsing trace
2352d83 HEAD@{4}: commit: Add trace data
68b659c HEAD@{5}: commit (initial): Initial release

만약 특정 commit을 수정 또는 삭제를 위해서 다음과 같은 명령어로 수행 가능하다. 참고로 i 옵션은 interactive 모드로 동작하는 것을 의미한다.

$ git rebase -i HEAD~3

위 명령어는 최근 3개 commit 내역을 열람하는 것이다. 위 예시의 경우 2, 3, 4 가 열람이 될 것이다. (0, 1은 실제 commit한 것이 아니고 log일 뿐이기 때문)

pick 2352d83 Add trace data
pick 2576b22 Implement to plot address variaion by parsing trace
pick 05998ac Delete raw data
 
# Rebase 68b659c..05998ac onto 68b659c
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out              

Commit 수정

여기서 05998ac commit 내역을 수정 하려면, pickreword으로 변경하고 저장하면 다음 화면이 나온다.

Delete raw data
 
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# HEAD detached from 2576b22
# You are currently editing a commit while rebasing branch 'master' on '68b659c'.
#
# Changes to be committed:
#   (use "git reset HEAD^1 <file>..." to unstage)
#
#       deleted:    data/data.log

새 텍스트 화면에서 첫 라인의 log를 수정 후 저장하면 log 수정이 끝난다.

$  git log
commit 7c696c482d2730ccfe54f1e0109faa3781e838d0
Author: km.hero.lee <...>
Date:   Tue Jun 28 11:09:33 2022 +0900

    Delete raw data in data directory

Commit 삭제

Commit 수정과 동일하게 rebase를 통해 interactive 모드로 동작시켜서 drop키워드를 써서 삭제가 가능하다. (또는 라인 삭제)

drop 2352d83 Add trace data
pick 2576b22 Implement to plot address variaion by parsing trace
pick 7c696c4 Delete raw data in data directory
 
# Rebase 68b659c..7c696c4 onto 68b659c

Leave a Reply

Your email address will not be published. Required fields are marked *