stash, cherry-pick - 코딩 중에 잘못된 브랜치에서 작업하고 있다는 사실을 깨달았어요

김동규·2023년 4월 26일
0

Git

목록 보기
9/15

개요

브랜치를 이동하면서 작업하고 있다가 뒤늦게 잘못된 브랜치에서 작업하고 있었다는 사실을 발견하는 경우가 있습니다.
그럴때는 아직 커밋하지 않았다면 stash, 커밋한 이후라면 cherry-pick과 revert를 사용하면 문제를 해결할 수 있습니다.

아직 커밋하기 전이라면...

git stash는 임시저장과 비슷하다고 생각하면 좋습니다.

명령을 실행한 경우 HEAD위로 리베이스 중인 커밋 두 개가 추가되는데, refs/stash라는 포인터로 커밋을 가리키고 있습니다.
확인해보면 stash@{0}라는 형식으로 표시됩니다.

/* git stash list 로 확인해보면... */
stash@{0}: WIP on rebase: 496dca8 TEST convert reduxTK

이제 다른 브랜치로 이동한 뒤 stash apply로 적용해주면...

/* 
* 본래 사용법은 git stash apply stash@{<stashnumber>}이지만 
* 가장 위의 stash를 적용할 때는 git stash apply만으로도 충분합니다.
*/
git stash apply

!주의 새로 등록하는 stash는 기존의 stash위로 쌓입니다. 즉 stash@{0}은 항상 가장 최근에 stash한 ref가 됩니다.
혼동을 방지하기 위해서는 적용한 뒤 git stash drop이나 git stash clear로 list를 정리해줍시다.

이미 잘못된 브랜치에 커밋한 뒤라면...

두 가지 사항을 정리해야겠네요.

  1. 진행한 커밋을 원래 작업했어야 할 브랜치로 옮긴다.
  2. 필요하다면, 잘못된 커밋을 올린 브랜치에서 커밋 내용을 무효화한다.

우선 1번부터 처리하겠습니다.

cherry-pick: 진행한 커밋을 원래 작업했어야 할 브랜치로 옮긴다.

git cherry-pick은 소수의 커밋을 다른 브랜치로 옮기기에 최적의 명령입니다.

firebase브랜치에서 작업했어야 했는데 rebase브랜치에서 작업하고 말았습니다.
22d599d wrong commit을 firebase브랜치로 옮기려면...

/* 먼저 firebase 브랜치로 checkout합니다. */
git switch firebase

/* 이후 브랜치명으로 cherry-pick 명령을 실행하면 다음과 같은 결과가 표시됩니다.*/
git cherry-pick rebase

/* 아래와 같이 여러 커밋을 한꺼번에 옮길 수도 있습니다. */
cherry-pick <commit> <commit>
cherry-pick <commit>..<commit>

커밋을 선택하는 여러가지 방법에 대해서는 Pro Git의 7.1 Git 도구 - 리비전 조회하기를 참조해주세요.

revert: 필요하다면, 잘못된 커밋을 올린 브랜치에서 커밋 내용을 무효화한다.

아직 rebase브랜치 위에 남아있는 22d599d wrong commit이 눈에 거슬린다면 처리할 수 있는 명령어는 여러 종류가 있습니다.
그러나 깃에 대해 잘 모른다면 그 중 가장 안전한 명령어는 revert입니다.

왜 위험한지, 다른 명령어는 무엇이 있는지에 대해서는 다음 기회에 다뤄보기로 합시다.

revert는 변경사항을 마이너스 방향으로 적용하는 명령이라고 생각하면 쉽습니다.

git switch rebase
git revert HEAD

22d599d의 변경사항을 삭제했는데 도리어 커밋이 하나 더 늘어났습니다. revert명령을 실행할 때 git이 22d599d커밋을 삭제하는 것이 아니라 22d599d커밋의 변경사항들을 삭제한 뒤 새로 add - commit을 거쳐 변경사항을 반영하는 식으로 동작하기 때문입니다.

profile
공식문서를 사랑하는 프론트엔드 주니어 개발자

0개의 댓글

관련 채용 정보