Git & Sourcetree

커밋 덮어쓰기(commit --amend)와 스태시(stash)

정구 2022. 2. 22. 10:09
728x90

갑작스럽게 체크아웃이 필요하다면 어떻게 해야할까?

 

 

내가 현재 작업 중인 브랜치에서 작업 내용이 아직 완료되지 않았고,

 

협업으로 인해 반드시 다른 브랜치로 이동하여서 급하게 핫픽스 등 다른 작업을 수행해야한다면?

 

 

테스트를 위해 임의의 진행 상황을 만들어보자.

 

내가 작업하던 test 브랜치에서 작업물을 아지 커밋하지 않았다.

현재 HEAD는 test

 

이 상태에서 main 브랜치로 돌아가면?

변경 사항이 생기기 전에 내용을 커밋하거나 저장하라는 경고메세지

 

 

 

에러가 발생한다.

 

브랜치를 만들고 체크아웃을 통해 변경하려고 하면 현재 작업 디렉토리가 깨끗해야한다.

 

이러한 경우 '임시 저장' 기능을 떠올리기 마련이다.

 

git 에서의 임시 저장을 알아보자.

 

 

 

😎 커밋 덮어쓰기 (commit --amend)

 

급하게 다른 브랜치에서 작업을 해야하는 경우 작업중이던 내용을 임시 저장해야한다.

 

작업 중이던 내용이 미완성 단계이긴 하지만 급한대로 커밋을 통해 임시 저장시킨다.

 

작업 중인 내용을 일단은 커밋

 

이렇게되면 쓸데없는 커밋 로그가 남는다는 문제점이 있다.

 

다시 작업을 이어나가고 커밋 기록을 삭제하기 위해서 커밋 덮어쓰기를 사용할 수 있다.

 

커밋되어있는 내용은 신경쓰지 말고 작업을 마무리시킨 후 커밋할 때 커밋 옵션에서 마지막 커밋 정정을 한다.

커밋 멘트도 수정하자.
커밋을 덮어씀

 

이렇게 커밋을 덮어쓰게 되면 이전 커밋은 남지 않고 새로운 커밋이 남게된다.

 

 

 

 

 

이번엔 강제푸시가 필요한 상황을 보자,

 

작업 브랜치의 내용을 푸시했음 origin/test 생겨난 모습

 

test 브랜치의 작업 내용을 원격 저장소로 푸시한 상태이다.

 

test 브랜치에서 작업을 하고 마지막 커밋 수정을 하게 되면?

새로운 분기가 생겨난다.

 

 

현재 나는 제일 최근에 커밋한 내용을 최종본으로 사용하고 싶다.

 

이런 상황이라면 최근에 커밋한 수정 내용을 저장소에 푸시해야되기 때문에 강제 푸시해야한다.

 

test 브랜치에 강제 push

 

커밋 내용이 변경되었다.

 

 

 

 

 

😎 Stash 사용하기

stash를 사용하면 커밋하지 않은 변경사항을 불필요하게 커밋할 필요없이 임시 저장이 가능하다.

 

마찬가지로 작업내용이 있는 도중 다른 브랜치로 이동해야하는 상황

 

작업 중인 내용이 있기 때문에 소스트리에서는 커밋 해야할 내용이 있다고 알려준다.

 

이 때 커밋하지 않고 스태시에 저장할 수 있다.

스태시 클릭

 

스테이지에 있는 변경사항 유지는 체크하지 않았다.

 

작업중이던 내용이 사라졌다?! 아니 저장되었다.

 

 

 

다른 브랜치에서의 작업이 끝나고, 스태시에 저장한 작업을 이어서 하고 싶으면 쉽게 불러올 수 있다.

스태시 적용선택 / 필요없다면 삭제도 가능

 

그런데 한가지 주의사항이 있다

 

새로운 파일을 생성하여 작업한, 스테이지에 한 번도 올라가지 않은 파일은 스태시를 사용할 수 없다.

 

? 표시가 있다면 스테이지에 올라간 적이 없다.

이럴 땐 스테이지에 올리면 스태시가 가능해진다.

 

 

 

728x90