GitNotes.26-1.md
본 문서는 Git Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

Section 26.1: Stash 작업이란 무엇인가?

프로젝트에서 작업 시, feature 브랜치에서 작업을 진행하던 도중 master 에서 발생한 버그를 수정하여야 하는 등의 경우가 발생한다. 현재의 코드가 커밋을 하기에는 적합하지 않으나, 그렇다고 해서 현재까지 작업한 변경사항이 유실되어서도 안되는 상황일 수 있다. 이러한 경우에 git stash 가 유용하게 사용될 수 있다.

작업 중인 브랜치에서 git status 를 수행하여 커밋되지 않은 변경사항들을 확인한다:

(master) $ git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: business/com/test/core/actions/Photo.c no changes added to commit (use "git add" and/or "git commit -a")

그리고는 git stash 명령을 입력하여 이 변경사항들을 stack 에 저장한다:

(master) $ git stash Saved working directory and index state WIP on master: 2f2a6e1 Merge pull request #1 from test/test-branch HEAD is now at 2f2a6e1 Merge pull request #1 from test/test-branch

작업 디렉토리에 새로운 파일들을 추가하였다면 이 파일들도 마찬가지로 stash 될 수 있다. 해당 파일들을 먼저 stage 영역에 추가하기만 하면 된다.

(master) $ git stash Saved working directory and index state WIP on master: (master) $ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) NewPhoto.c nothing added to commit but untracked files present (use "git add" to track) (master) $ git stage NewPhoto.c (master) $ git stash Saved working directory and index state WIP on master: (master) $ git status On branch master nothing to commit, working tree clean (master) $

이제 작업 디렉토리는 어떠한 변경 사항도 존재하지 않는 정리된 상태가 되어 있을 것이다. git status 명령을 다시 수행함으로써 이를 확인할 수 있다:

(master) $ git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean

가장 최근의 stash 를 적용하기 위하여, git stash apply 명령어를 실행한다 (추가적으로, 가장 최근에 stash 된 변경사항을 적용하는 동시에 삭제 처리하기 위해 git stash pop 명령어를 사용할 수도 있다):

(master) $ git stash apply On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: business/com/test/core/actions/Photo.c no changes added to commit (use "git add" and/or "git commit -a")

여기에서 유의해야 할 점은, stash 작업은 사용자가 해당 작업을 수행중이던 브랜치를 기억하지 않는다는 점이다. 위 예제들에서는, 사용자가 master 브랜치에서 stash 작업을 수행하였다. 만약 해당 사용자가 개발 브랜치인 dev 브랜치로 변경한 후 git stash apply 명령을 수행한다면, 가장 최근 stash 는 dev 브랜치에 적용이 될 것이다.

(master) $ git checkout -b dev Switched to a new branch 'dev' (dev) $ git stash apply On branch dev Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: business/com/test/core/actions/Photo.c no changes added to commit (use "git add" and/or "git commit -a")

[출처] https://books.goalkicker.com/GitBook/ (CC BY-SA)

반응형

+ Recent posts