yeoseon/tip-archive

[Git] git pull 충돌 오류 (git stash 이용하기)

yeoseon opened this issue · 2 comments

첫번째 에러

Your local changes would be overwritten by merge. 
Commit, stash or revert them to proceed.

이 경우

git stash

를 사용하면 해결된다.

두번째 에러

error: The following untracked working tree files would be overwritten by merge:
Please move or remove them before you merge.

다음 에러의 경우는 stash로 해결되지 않는다.
untracked 파일이라 그렇다.
이 경우 untracked 파일을 add 해준 후 stash를 해준다.

git add -A
git stash

출처

http://vezi95.blogspot.com/2016/05/git-pull.html
https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Stashing%EA%B3%BC-Cleaning

제대로 원리를 이해한 후 close 할 것

Git Stash 사용

기존에 작업하던 소스코드가 있는데, 다른 요청이 들어와서 잠시 브랜치를 변경해야하는 상황일 때, 기존에 하던 작업을 git stash 를 이용해 잠시 저장해둘 수 있다.

스택에 stash 하나가 생성이 되면서 현재 작업중인 파일이 저장되고, working directory는 깨끗해짐

git stash   
git stash save

저장된 stash 목록 확인

git stash list

저장된 stash를 다시 working directory에 적용한다.
어느 브랜치에 적용해도 관계없다.(깨끗한 working directory가 아니어도 됨. 충돌시 알려줌)

git stash apply  
git stash apply stash@{2}[stash이름]

이름을 지정하지 않으면 가장 최근에 추가된 stash를 적용한다.
적용한다고 해도, stash 목록은 아직 남아있으므로 필요 없을시에 git stash drop 명령어를 통해 삭제처리를 해야한다.

stash 적용 후 바로 삭제를 원할 경우

git stash pop

을 사용한다.


이외

stage 되어있는 파일 제외하고 stash 생성

git stash --keep-index

기본 : 추적하는 파일만 stash 저장
추적중이지 않은 파일을 같이 저장하려면

git stash -u   
git stash --include-untracked

저장할 파일을 결정한 후 저장

git stash --patch

Stash를 적용한 브랜치 만들기

Stash를 하나 생성하게 되면 한동안 유지한 채로, 그 브랜치에서 새로운 일을 함.
Stash에 있는 것을 한참 후에 적용하려면 충돌 등의 문제가 생길 수 있다.
Stash를 적용한 Branch를 하나 만들어서, 해당 stash를 테스트 후에 적용하고 Stash를 삭제하면 된다.

브랜치를 새로 만들고, Stash를 적용해주는 명령어

git stash branch testchanges

Work Directory 청소하기

Stash에 저장하지 않고, 단순히 현재 작업중이던 결과를 지워버리고 싶을 때

git clean 

신중히 사용할 것. 원복이 안됨
-n 옵션은 시뮬레이션 옵션이다. 이를 꼭 이용하자.
다양한 옵션을 확인하고 사용하자.