GIT(4) : stash

notepad·2023년 2월 2일
0

git

목록 보기
4/14

특정 브랜치에서 작업은하였으나, commit은 안한상태에서
다른 브랜치로 switch 할때 필요한 command

veritas@veritas:~/git/gittest$ git status
On branch b1
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   main.py

no changes added to commit (use "git add" and/or "git commit -a")
veritas@veritas:~/git/gittest$ git switch master
error: Your local changes to the following files would be overwritten by checkout:
	main.py
Please commit your changes or stash them before you switch branches.
Aborting
veritas@veritas:

b1->master 로 switch시 main.py 에서 conflict 가 일어남
conflict 될 요소가없다면 switch 되는 경우도 있음. (FastFoward)
stash 는 아래와 같은 상황에 쓰일수 있다.
b1 브랜치에서 내가 작업중이고 b2 브랜치에서 동료가 작업중인데
동료가 b2 브랜치에서 도움을 요청해서 b1->b2로 switch 하려고 하는데 나는 아직 변경사항을 commit할 상태가 아님.
이때 stash를 활용.

stash

변경사항을 일종의 stack에 저장 및 불러올 수 있는 기능

git stash (git stash save)

git stash(git stash save) 를 하면 현재 작업을 일시적으로 저장할수 있다. (일종의 stack에 저장)
이때 status 에는 변경사항이 존재하지않음.
이상태에서 다른 branch로 switch 하여 작업후 다시 원 branch 로 복귀 git stash pop으로 작업 내용을 복구

veritas@veritas:~/git/gittest$ git stash save
Saved working directory and index state WIP on b1: 6e28fc9 b1 commit
veritas@veritas:~/git/gittest$ git status
On branch b1
nothing to commit, working tree clean
veritas@veritas:~/git/gittest$ git stash pop
On branch b1
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   main.py

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (ce4e38e4d5dfc88ea22ab10f21089dbc658bd7db)
veritas@veritas:~/git/gittest$ git status
On branch b1
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   main.py

no changes added to commit (use "git add" and/or "git commit -a")

git stash list

stash된 사항들을 보여준다.

git stash pop (vs apply)

pop은 list에서 stash 사항을 꺼내옴. (stack의 pop을 생각)
반면 apply 는 stash된 사항을 적용하나 stack에서 삭제하지는 않음.
git apply 사용처 : 해당 브랜치의 변경사항을 다른 여러 branch에 적용하고 싶을때 사용.

veritas@veritas:~/git/gittest$ git status
On branch b1
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   main.py

no changes added to commit (use "git add" and/or "git commit -a")
veritas@veritas:~/git/gittest$ git stash
Saved working directory and index state WIP on b1: 6e28fc9 b1 commit
veritas@veritas:~/git/gittest$ git switch master
Switched to branch 'master'
veritas@veritas:~/git/gittest$ git stash apply
Auto-merging main.py
CONFLICT (content): Merge conflict in main.py
veritas@veritas:~/git/gittest$ git status
On branch master
Unmerged paths:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
	both modified:   main.py

no changes added to commit (use "git add" and/or "git commit -a")
##### conflit를 해결한다.
veritas@veritas:~/git/gittest$ git add .
veritas@veritas:~/git/gittest$ git commit -m "apply stahsed changes"
[master 66bb542] apply stahsed changes
 1 file changed, 1 insertion(+), 1 deletion(-)
veritas@veritas:~/git/gittest$ git status
On branch master
nothing to commit, working tree clean
veritas@veritas:~/git/gittest$ git stash list
stash@{0}: WIP on b1: 6e28fc9 b1 commit
veritas@veritas:~/git/gittest$ git switch b1
Switched to branch 'b1'
veritas@veritas:~/git/gittest$ git status
On branch b1
nothing to commit, working tree clean
veritas@veritas:~/git/gittest$ git stash apply
On branch b1
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   main.py

no changes added to commit (use "git add" and/or "git commit -a")

특정 stash 적용하기

stash 사항이 여러개인 상태에서 apply 혹은 pop을 하면 가장 최신 stash 가 반영.
아래의 경우 2번.

veritas@veritas:~/git/gittest$ git stash list
stash@{0}: WIP on b1: 6e28fc9 b1 commit
stash@{1}: WIP on b1: 6e28fc9 b1 commit
stash@{2}: WIP on b1: 6e28fc9 b1 commit

git stash apply stash@{1}과 같이 특정 stash 를 지정하여 apply 가능.

veritas@veritas:~/git/gittest$ git stash list
stash@{0}: WIP on b1: 6e28fc9 b1 commit
stash@{1}: WIP on b1: 6e28fc9 b1 commit
stash@{2}: WIP on b1: 6e28fc9 b1 commit
veritas@veritas:~/git/gittest$ git stash apply stash@{1}
On branch b1
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   main.py

no changes added to commit (use "git add" and/or "git commit -a")

git stash clear

stash list 를 완전히 비움

git stath drop

git stash drop stash@{1}

최신 stash 혹은 특정 stash 를 삭제함

0개의 댓글