티스토리 뷰

1. git stash --include-untracked


git 에서 stash 시 새 파일과 같은 untracked file은 stash에 포함해 주려면 따로 명령어를 추가해 줘야 한다.

git stash --include-untracked

 

 

위 명령어를 사용해서 stash를 추가한 후 나중에 적용해주려면 

git stash list

 

위 코드를 작성해서 stash들의 list를 확인해야 한다. 위 코드를 작성하면 아래와 같은 stash를 볼 수 있다.

 

 

stash@{0}: WIP on ... wip: ...

 

이후 git stash apply stash@{0}로 신규 파일이 들어있는 stash를 적용시켜주면 된다.

 

 

 

 

2. 에러해결


나의 경우  git stash apply stash@{0}를 쳤더니 아래와 같은 에러가 발생했다.

error: unknown switch `e'
usage: git stash apply [--index] [-q | --quiet] [<stash>]

    -q, --[no-]quiet      be quiet, only report errors
    --[no-]index          attempt to recreate the index

 

 

 

stack overflow에서는 이유를 다음과 같이 답변해주고 있다

You need to quote the string, because your shell is eating the content of the {} as an expansion. So use git stash apply 'stash@{2}'. Alternatively you can use the SHA of the stash, or next time when you apply it, you can name the stash yourself.

 

셸에서 확장된다는 것은 일반적으로 중괄호 {} 안의 내용이 변수나 명령어로 해석될 수 있다는 것을 의미한다.

예를 들어, {0}이라는 표현은 셸에서는 "0번째 인자"로 해석될 수 있다. 하지만 실제로는 "stash@{0}"이라는 문자열 자체를 사용해야 하는데, 셸이 중괄호 안의 내용을 확장하여 잘못된 인자로 해석하는 문제가 발생할 수 있다.

 

따라서 따옴표를 사용하여 문자열을 감싸면 셸은 그 안의 내용을 확장하지 않고 원래의 문자열 그대로 사용할 수 있기 때문에 중괄호 안의 내용이 올바르게 해석되어 명령어가 제대로 동작할 수 있다.

 

 

 

결론적으로 아래와 같이 따옴표로 감싸주면 해결된다.

git stash apply 'stash@{0}'

 

 

 

참고

https://stackoverflow.com/questions/31297108/git-stash-apply-stashx-not-working-for-me