[git] 로컬에서 commit 한 내역 새로운 브랜치로 옮기기

May·2022년 4월 12일
2

git

목록 보기
2/2

🧚 How to move committed changes to a new branch

작업을 진행하고 로컬에서 commit 까지 완료했는데,
작업한 브랜치가 잘못되었다는 것을 깨달았다.
다행히 아직 remote 에 push 를 하진 않았고, 로컬에만 commit 해둔 상황.


rebase 를 사용해서 복잡하게 해결하는 방법이 있던데,
나는 로컬 브랜치 하나 옮기자고 rebase 사용하다가 초가삼간 태워먹는 짓은 하고 싶지 않았다.


찾아보니 아주 간단한 방법이 하나 있었다.
부작용이라면, 되돌리고자 하는 커밋들이 하나로 combine 된다는 것?
어차피 커밋을 대여섯개 진행하는동안 브랜치가 잘못된줄 모르는 상황은 더 심각하기 때문에 그건 그 때 가서 생각하기로 하고, 이 방법으로 브랜치 변경을 진행했다.


1. 되돌려야할 작업내역을 확인한다.

git log

위 커맨드를 통해 커밋을 얼마나 되돌려야 하는지 확인한다.


2. 해당 커밋의 작업내역을 unstage 한다.

git reset --soft HEAD~1

1 자리에 unstage 할 커밋의 갯수를 입력하면 된다.
위 커맨드를 입력하면 가장 최근 1개의 커밋만 unstaged 상태로 변경된다.


3. 해당 작업 내역을 stash 한다.

git stash -u

stash 에 대해 잘 모르는 분들을 위해 설명하자면, 임시저장 커맨드이다.
다만 git stash 라는 기본 커맨드를 실행하면, untracked files 라고 불리는 파일들이 누락될 위험이 있다.
새로 추가한 폴더, 새로 추가한 파일이나 에셋 등이 해당하는데, 해당 변경사항들이 누락되는 것을 방지하기 위해 -u 를 붙인다.
include untracked 의 약자이다.


git stash list 커맨드로 작업내역이 제대로 저장되었는지 확인하자.
또한 git status 커맨드로 현재 브랜치에 작업내역이 남아있지 않은지 반드시 확인한다.
(건너뛰어도 된다 생각하면 그 때 사고가 발생하는 것이다...)
실제로, 내가 경고했음에도 불구하고 팀 내에서 이런 사고가 매번 발생한다.


4. 이동하고 싶은 브랜치로 checkout 한다.

git checkout branchname

이동하려던 브랜치로 checkout 한다.
이 과정에서 새 브랜치를 생성하거나, 기존에 있던 브랜치로 checkout 하거나 그건 본인 상황에 맞춰서.


5. 작업하려던 브랜치에서 stash 사항을 불러온다.

git stash pop

위 커맨드를 사용하면 임시저장했던 내역 중 가장 최신의 내역을 불러온다.
git status 커맨드로 작업내역이 제대로 불러와졌는지 확인한다.


6. 이제 다시 commit 을 진행하면 된다.

작업내역이 새로운 브랜치로 옮겨졌으니 commit 을 다시 진행하면 된다.


profile
쉽다는 설명도 저는 어려워요.

0개의 댓글