[git/github] rebase, stash

rebase

프로젝트를 진행하면서 git을 사용하면 작업내용별 branch를 만들어서 작업 후 main에 병합을 시킨다. 이때 방법은 merge와 rebase가 있는데, merge의 경우 각각의 commit 기록이 모두 남게되지만 rebase를 하면 commit의 기록을 관리하여 1개만 남겨서 깔끔하게 관리할 수 있다.

rebase 해보기

git pull

local main을 최신상태로 업데이트

git checkout main
git pull origin main

rebase

내 작업 branch에서 rebase

git checkout feature/[작업 branch]
git rebase -i master

squash

터미널에서 commit된 기록을 모두 볼 수 있는데, 제일 상단의 commit만 pick으로 두고 나머지는 pick 대신 s로 바꿔준다.

conflict

여기서 conflict가 발생할 수 있는데, 이를 해결 후 다시 git add [conflict 해결 파일명] 후, git rebase --continue를 하면 된다 (commit은 x).
혹시 잘못진행이 되고있다 판단된다면
git rebase --abort로 빠져나오면 된다.

commit

그러면 commit 메세지를 수정하는 창이 다시 나오는데, 여기서 이전의 모든 커밋을 통합하는 커밋메세지로 수정이 가능하다.
이후 git log를 통해 push될 commit 이 잘 정리되었는지 확인.

git push

git push -u origin feature/[작업 branch] -f

commit의 수정이 있었으므로 그냥 push를 하게되면 오류가 나타난다. 그래서 반드시 -f 로 force push가 필요.

stash

git add .를 실행하고 commit을 할 때, 원하지 않는 파일 변화가 기록될 수 있다. 예를들면 현재 다른 파일을 수정중이였는데 commit 시에는 이 파일 수정은 포함시키고싶지 않은 경우.

이럴때 stash를 사용할 수 있는데, git stash를 써서 변화가 있는 파일을 임시로 보관할 수 있고, 이 상태에서 rebase를 진행하면 원치 않는 파일의 tracking 은 commit에서 제외시킬 수 있다.

rebase가 모두 완료되었다면git stash apply로 다시 파일을 '보관함'에서 빼올 수 있음.

stash된 파일은 git stash list로 확인 가능.

좋은 웹페이지 즐겨찾기