[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 내역을 수정 하려면, pick
을 reword
으로 변경하고 저장하면 다음 화면이 나온다.
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