육감적 코딩

[Git 교과서]7장. 임시 처리 본문

정리/Git

[Git 교과서]7장. 임시 처리

감감감감감감 2021. 11. 30. 17:37

7.1 스태시

7-1

스태시 명령을 실행하면 현재 작업 중인 내용은 임시 저장되고, 수정 전 마지막 커밋 상태로 돌아갑니다.

7.1.3 스태시의 임시 스택 영역에 작업 중인 코드 저장

스태시 명령어는 수정 중인 내역을 커밋하지않고 브랜치를 이동할 수 있게 워킹 디렉터리를 깨끗이 청소합니다.

스태시는 현재 작업들을 임시 스택 영역에 저장합니다.

$ git stash

또는

$ git stash save

$ git stash save "WIP: 메시지"

스태시는 스택 구조로 여러 번 실행하여 저장할 수 있습니다. 각각의 스태시를 구분하기위해 메시지를 추가할 수 있습니다.

7.1.4 임시 저장 영역의 스택 목록

스태시에 저장된 스택은 list 옵션으로 확인할 수 있습니다.

$ git stash list

7-2

7-3

stash@{<인덱스>} 쌍으로 스택에 저장됩니다.

또한 현재 워킹 디렉터리 내용과 스태시된 내용 간 파일 변화를 볼 수도 있습니다.

$ git stash show // -p <stash@{인덱스}> 옵션을 추가로 사용하면 diff 기능과 유사하게 사용할 수 있습니다.

7.1.5 임시 저장한 스태시 불러오기

$ git stash pop

스태시는 스택 구조이기때문에, 제일 마지막에 저장된 내용부터 읽어 옵니다.

스태시와 스테이지 영역
스태시는 워킹 디렉터리와 스테이지 영역의 파일까지 모두 보관합니다.
스태시로 복원할 때는 워킹 디렉터리만 되돌려 놓습니다.
스테이지에 등록된 스테이지 상태까지 복구하길 원한다면 —index 옵션을 사용해야합니다.

$ git stash apply --index

7.1.6 스태시 복원으로 충돌

스태시를 복원할 때 같은 파일에서 동일한 부분을 변경했다면 충돌이 발생합니다.

복원하는 도중 충돌이 생기면 스태시는 스택에 저장된 내용을 자동으로 삭제하지 않습니다.

충돌을 해결한 후 스태시 목록을 수동으로 삭제해야합니다.

스태시 충돌이 예상된다면 스태시용 브랜치를 하나 생성해서 작업하는 것을 추천합니다.

$ git stash branch <브랜치이름>  // 스택에 저장된 내용으로 새 브랜치를 생성.

정상적으로 스태시 복원이 적용되면 저장된 스택은 자동으로 삭제합니다.

7.1.7 스태시 복사

스태시 스택에 저장된 항목들은 어느 브랜치에서나 복원이 가능합니다.

apply옵션은 스택에 저장된 항목을 불러와 현재 브랜치로 복원합니다.

$ git stash apply

차이점

  • pop : 스택내용을 복원한 후 스택목록에서 자동으로 삭제합니다. 가장 마지막 스택내용을 가져옵니다.
  • apply : 스택내용을 복원한 후 스택목록에서 삭제하지않습니다. 스택 목록을 지정하여 적용 할 수있습니다.

스택 목록 중 지정하여 스태시 복사

$ git stash apply stash@{<인덱스>}

7.1.8 스태시 삭제

충돌이 발생하거나 apply 명령어로 워킹디렉터리를 복구한 경우 수동으로 스택에서 삭제해야합니다.

$ git stash drop

스태시를 너무 많이 만들어 사용하는것은 바람직하지 않습니다.

7.2 워킹디렉터리 청소

clean 명령어를 사용하면 워킹 디렉터리에 있는 추적되지 않는 파일들을 찾아 삭제합니다.

$ git clean

하지만 삭제 명령은 민감해서 몇 가지 옵션을 같이 사용해야 합니다.

  • -f : 강제 삭제
  • -n : 잘못 삭제하는 것을 방지하고자 파일을 가상으로 처리해 보고 사용자에게 확인을 요청합니다.
  • -d : untracked 상태의 파일만 삭제합니다. 잘 삭제되지 않는다면 -f 옵션을 같이 사용할 수 있습니다.
  • -x : .gitignore에 등록된 파일까지 같이 삭제하고 싶다면 -x 옵션을 사용합니다.

-n 옵션을 사용하면 삭제할 파일들을 보여줍니다.

7-4

'정리 > Git' 카테고리의 다른 글

[Git 교과서]9장. 복귀  (0) 2021.12.12
[Git 교과서]8장. 병합과 충돌  (0) 2021.12.12
[Git 교과서]6장. 브랜치  (0) 2021.11.23
[Git 교과서]5장. 서버  (0) 2021.11.21
[Git 교과서]4장. 커밋  (0) 2021.11.21
Comments