3-1. Git의 stash: 변경 사항 임시 저장
1. Git stash의 이해: 변경 사항을 잠시 숨기다
Git의 stash 기능은 현재 작업 중인 변경 사항을 임시로 저장하고, 작업 디렉토리를 깨끗한 상태로 되돌리는 유용한 기능입니다. 마치 요리 중에 잠시 다른 일을 처리하기 위해 재료를 냉장고에 넣어두는 것과 같습니다. 변경 사항을 'stash'에 보관해두면, 현재 작업 내용을 잃어버릴 걱정 없이 다른 브랜치로 이동하거나, 다른 작업을 수행한 후 나중에 다시 불러와서 작업을 이어서 진행할 수 있습니다.
1) 왜 stash가 필요할까?
소프트웨어 개발 과정에서는 여러 가지 상황에 직면하게 됩니다.
- 긴급한 버그 수정: 현재 작업 중인 내용과 관계없이 급하게 버그를 수정해야 하는 경우, 현재 변경 사항을 커밋하지 않고 다른 브랜치로 이동해야 합니다.
- 브랜치 전환: 다른 브랜치에서 작업을 해야 할 필요가 있지만, 현재 작업 중인 변경 사항을 아직 커밋하기에는 이르거나, 특정 브랜치에 반영하고 싶지 않은 경우.
- 코드 검토: 다른 개발자에게 코드 검토를 요청해야 하지만, 아직 완성되지 않은 변경 사항이 있는 경우.
이러한 상황에서 stash는 매우 유용하게 사용될 수 있습니다. 현재 변경 사항을 임시로 저장해두고, 다른 작업을 수행한 후 다시 불러와 작업을 이어서 진행할 수 있기 때문입니다.
2) stash와 commit의 차이점
stash와 commit은 모두 변경 사항을 저장하는 기능이지만, 그 목적과 사용 방식에서 차이가 있습니다. commit은 변경 사항을 영구적으로 저장하고, 버전 관리를 위해 사용됩니다. 반면, stash는 임시적으로 변경 사항을 저장하고, 현재 작업 내용을 보류하거나 다른 작업을 수행하기 위해 사용됩니다.
commit: 변경 사항을 영구적으로 저장, 버전 관리, 코드 히스토리 유지stash: 변경 사항을 임시로 저장, 작업 내용 보류, 브랜치 전환
2. stash의 기본 사용법
stash는 간단한 명령어로 사용할 수 있습니다. 기본적인 사용법을 단계별로 살펴보겠습니다.
1) 변경 사항 임시 저장: git stash save
현재 작업 중인 변경 사항을 stash에 저장하려면 git stash save 명령어를 사용합니다. 이 명령어는 현재 작업 디렉토리의 변경 사항을 stash에 저장하고, 작업 디렉토리를 마지막 커밋 상태로 되돌립니다.
git stash save "작업 내용에 대한 설명 (선택 사항)"
"작업 내용에 대한 설명":stash에 저장할 때, 해당stash에 대한 설명을 덧붙일 수 있습니다. 이 설명은 나중에stash를 확인할 때, 어떤 변경 사항을 저장했는지 파악하는 데 도움이 됩니다. 설명을 추가하지 않으면, Git은 자동으로 "WIP on (브랜치 이름): (커밋 메시지)" 형식의 메시지를 사용합니다.
2) stash 목록 확인: git stash list
git stash에 저장된 목록을 확인하려면 git stash list 명령어를 사용합니다. 이 명령어를 통해 저장된 stash의 순서, 설명, 그리고 저장된 브랜치와 커밋 정보를 확인할 수 있습니다.
git stash list
3) stash 불러오기: git stash apply 또는 git stash pop
stash에 저장된 변경 사항을 다시 불러오려면 git stash apply 또는 git stash pop 명령어를 사용합니다.
-
git stash apply:stash에 저장된 변경 사항을 현재 작업 디렉토리에 적용합니다. 이 명령어는stash를 삭제하지 않고, 다시 사용할 수 있도록 유지합니다. 특정stash를 지정하여 불러올 수 있으며, 지정하지 않으면 가장 최근의stash가 적용됩니다.bash git stash apply stash@{0} # stash 목록에서 첫 번째 stash를 적용
-
git stash pop:stash에 저장된 변경 사항을 현재 작업 디렉토리에 적용하고, 해당stash를 삭제합니다.git stash apply와 유사하지만,stash를 한 번 사용하면 삭제된다는 차이점이 있습니다. 마찬가지로 특정stash를 지정하지 않으면 가장 최근의stash가 적용됩니다.bash git stash pop # 가장 최근의 stash를 적용하고 삭제
4) stash 삭제: git stash drop
더 이상 필요 없는 stash를 삭제하려면 git stash drop 명령어를 사용합니다. 이 명령어를 사용하면 해당 stash가 영구적으로 삭제됩니다.
git stash drop stash@{0} # stash 목록에서 첫 번째 stash 삭제
3. stash의 고급 활용
stash는 기본적인 사용법 외에도, 다양한 상황에서 활용할 수 있는 고급 기능들을 제공합니다.
1) 특정 파일만 stash 하기
특정 파일의 변경 사항만 stash에 저장하고 싶을 때가 있습니다. 이때는 git stash push 명령어를 사용합니다. git stash push 명령어는 -- 옵션 뒤에 특정 파일 또는 디렉토리 경로를 지정하여, 해당 파일 또는 디렉토리의 변경 사항만 stash에 저장할 수 있습니다.
git stash push -m "특정 파일 변경" -- 파일1.txt 파일2.txt
2) stash를 다른 브랜치에 적용하기
stash에 저장된 변경 사항을 현재 브랜치가 아닌 다른 브랜치에 적용해야 하는 경우가 있습니다. 이럴 때는 git stash apply 또는 git stash pop 명령어를 해당 브랜치에서 실행하면 됩니다. 먼저 다른 브랜치로 이동한 다음, stash를 적용하면 됩니다.
git checkout 다른_브랜치
git stash apply stash@{0}
3) stash 충돌 해결
stash를 적용하는 과정에서 충돌이 발생할 수 있습니다. 예를 들어, stash에 저장된 변경 사항과 현재 작업 디렉토리의 변경 사항이 동일한 파일의 동일한 부분을 수정한 경우 충돌이 발생합니다. 이러한 경우, Git은 충돌을 해결하도록 요구합니다.
-
충돌 해결 방법: 충돌이 발생한 파일을 열어, 충돌 표시 (
<<<<<<<,=====<mark class="highlight">,>>>>>>>)를 확인하고, 원하는 대로 수정합니다. 수정 후에는 변경 사항을 스테이징하고, 커밋하여 충돌을 해결합니다.bash git add 충돌난_파일.txt git commit -m "stash 충돌 해결"
4) stash 목록 정리
stash를 너무 많이 사용하다 보면, 목록이 지저분해질 수 있습니다. 더 이상 필요 없는 stash는 삭제하여 목록을 정리하는 것이 좋습니다. 또한, git stash clear 명령어를 사용하면 모든 stash를 한 번에 삭제할 수 있습니다. 주의: 이 명령어는 실행 취소가 불가능하므로, 신중하게 사용해야 합니다.==
git stash clear
4. stash 사용 예시: 브랜치 간 이동
stash의 활용 사례를 통해 실제 개발 시나리오를 살펴보겠습니다.
-
시나리오:
feature-a브랜치에서 작업 중, 긴급한 버그를 수정하기 위해main브랜치로 이동해야 합니다.feature-a브랜치에서 아직 커밋하지 않은 변경 사항이 있습니다. -
해결 방법:
git stash save "feature-a 브랜치 작업 중단": 현재 변경 사항을stash에 저장합니다.git checkout main:main브랜치로 이동합니다.git pull origin main:main브랜치의 최신 내용을 가져옵니다.- 버그 수정 및 커밋: 버그를 수정하고
main브랜치에 커밋합니다. git checkout feature-a: 다시feature-a브랜치로 돌아갑니다.git stash apply:stash에 저장했던 변경 사항을 다시 불러옵니다.- 작업 재개:
stash를 적용한 후, 원래 하던 작업을 이어서 진행합니다.

위 그림은 stash를 사용하여 브랜치 간 이동을 수행하는 워크플로우를 보여줍니다. feature-a 브랜치에서 작업 중인 개발자는 변경 사항을 stash에 저장하고, main 브랜치로 이동하여 버그를 수정합니다. 그런 다음, 다시 feature-a 브랜치로 돌아와 stash를 적용하고 작업을 이어서 진행합니다.
5. 주의사항과 트러블슈팅
stash를 사용할 때 발생할 수 있는 몇 가지 주의사항과 트러블슈팅 팁을 소개합니다.
- 충돌 해결:
stash를 적용할 때 충돌이 발생할 수 있습니다. 충돌이 발생하면, 충돌을 해결하고 다시stash를 적용해야 합니다. stash목록 관리:stash목록이 너무 많아지면 관리가 어려워집니다. 더 이상 필요 없는stash는 삭제하여 목록을 정리하는 것이 좋습니다.stash내용 확인:stash를 적용하기 전에,git stash list또는git stash show명령어를 사용하여stash에 저장된 내용을 확인하는 것이 좋습니다.stash는 임시 저장:stash는 임시 저장 기능이므로, 중요한 변경 사항은 반드시 커밋하여 영구적으로 저장해야 합니다.stash에만 의존하여 작업을 진행하는 것은 위험합니다.-
stash와untracked파일:git stash는 기본적으로untracked파일을 저장하지 않습니다.untracked파일도stash에 포함하려면--include-untracked또는-u옵션을 사용해야 합니다.bash git stash save -u "untracked 파일 포함"
6. 결론
Git stash 기능은 개발자가 코드 변경 사항을 임시로 저장하고, 다양한 작업을 효율적으로 수행할 수 있도록 도와주는 강력한 도구입니다. stash를 적절하게 활용하면, 작업 흐름을 방해받지 않고, 다양한 상황에 유연하게 대처할 수 있습니다. stash의 개념과 사용법을 이해하고, 실무에서 적극적으로 활용하여 생산성을 향상시키세요.
비슷한 글 추천
4-4. Git의 workflow: Feature Branch Workflow
Feature Branch Workflow를 이해하고, 실무에 적용하는 방법을 설명합니다.
3-6. Git의 interactive rebase: 커밋 수정
interactive rebase를 사용하여 여러 커밋을 수정하고 정리하는 방법을 익힙니다.
4-1. Git의 workflow: Gitflow 소개
Gitflow, GitHub Flow 등 대표적인 Git 워크플로우를 소개하고, 각 워크플로우의 장단점을 비교합니다.
4-3. Git의 workflow: Gitflow 실습
Gitflow 워크플로우를 실제 프로젝트에 적용하는 실습을 진행합니다.
Comments (0)
No comments yet. Be the first to comment!
Please to write a comment.