국비교육(22-23)

11일차(4)/GIT(5) : stash, reset

서리/Seori 2022. 10. 20. 22:53

(test4)

 

- stash : commit되지않은 데이터를 잠시 임시저장해두는 것.


작업 중에 다른 브랜치로 체크아웃을 해야 하는데,
commit하기에는 애매하고, 코드를 버리기에도 아까운 상황이 있을 수 있다.

이럴 때에는 작업내용을 어딘가에 임시저장했다가 나중에 돌아와서 저장했던 내용을 다시 불러오는 기능이 필요하다.
그 기능이 바로 stash이다!

 

 

- status를 보면 commit 되지 않은 수정된 파일과 untracked 파일이 있다. 이 파일들을 stash 한다!

 

git stash : 잠시 임시저장하기
git stash pop : 임시저장한 내용을 다시 나타나게 하기
git stash -u : untracked file 을 포함해서 보관하겠다.(수정했지만 commit하지 않은 내용도 다 저장됨)

git stash -u 상태에서 git status를 해보면 commit을 하지않아도 working tree가 clean 상태가 된 것을 볼 수 있다.

 

git stash list : 저장된 내용들을 리스트로 볼 수 있다.

인덱스 번호가 매겨져 있고, 여러 개도 저장 가능!

 


 

- 현재 2개를 저장한 상태. git stash list에서 확인할 수 있다.

- stash@{숫자}에서 옆에 있는 숫자가 id(인덱스)이다.

 

- stash pop 은 stash 에 저장된 내용을 삭제하면서 불러오는 것이다.

  저장된 것을 삭제하면서 가지고 온다! 

 

- 마지막에 git stash pop 을 보면 No stage entries found. 라고 떠 있다.

 stash pop으로 꺼내오고 나면 stash list는 더 이상 없다(비어 있다).



- stash pop은 나중에 넣은 데이터부터 먼저 나온다.(삭제하면서)

  위와 같이 생긴 구조라고 생각하면 이해하기 쉽다!

 

git stash apply 숫자 : list에서 보이는 인덱스로 stash를 가지고 나올 수 있다.

 

- stash apply는 pop과 다르게 stash되었던 데이터를 지우지 않고 불러오는 것이다.

- 나중에 git stash list를 보면 저장된 내용이 그대로 있다.

 

git stash drop 숫자 : 저장된 stash를 삭제하는 기능

 

- 삭제하면 stash에 달려 있던 인덱스는 하나씩 앞으로 당겨진다.

 


 

- reset : commit을 취소하는 기능. HEAD와 master를 함께 옮기는 것을 reset이라 한다.

 

- 찍은 사진이 마음에 안 들어서 삭제하는 것!

- reset의 종류에는 세 가지가 있다. ( hard / mixed / soft )

- HEAD와 master를 함께 이동시킨다. HEAD만 내리는 건 체크아웃으로 가능하지만,

 reset은 branch pointer와 함께 내리는 것이다.(여러칸 이동시킬 수도 있다)

 

1) hard

git reset --hard HEAD~ : 헤드에서 한 단계 앞으로 하드하게 리셋한다.

 

- "success!" 라는 commit을 삭제하고, HEAD와 master의 위치를 한 단계 아래로 이동시켰다.

- 하단의 "index.html added" 라는 이전 커밋 이후에 작성한 내용은 전부 다 삭제된다.

 

git reflog : commit, checkout, reset 등의 활동에 대한 이전 기록들을 쭉 볼 수 있다.

git reset --hard 453568e (7자리) 를 입력해서 hard reset을 시점으로 되돌릴 수 있다.

 

- 한번 리셋을 해도 commit햇던 기록은 다 저장되어 있고, reset을 했더라도 복구할 수 있다.

 

 


2) soft

git reset --soft HEAD~ : 헤드에서 한 단계 앞으로 소프트하게 리셋한다.

 

- "success!" 라는 commit을 삭제하고, HEAD와 master의 위치를 한 단계 아래로 이동시켰다.

- index.html 에서 수정된 내용(modified)은 커밋만 되지 않았을 뿐 add한 상태로 그대로 남아 있다.

 


 

3) mixed

git reset --mixed HEAD~ : 헤드에서 한 단계 앞으로 중간 수준으로 리셋한다. 

 

- "success!" 라는 commit을 삭제하고, HEAD와 master의 위치를 한 단계 아래로 이동시켰다.

- index.html 에서 수정된 내용(modified)은 데이터는 있으나 add되지 않은 상태로 남아 있다.

- add까지 취소해준 것이므로 내용을 수정한 후 다시 add, commit 해주면 된다.

 

- 보통은 mixed를 가장 많이 사용한다.

 


 

- reset의 hard / mixed / soft 비교

- commit 하기전에 add라는 과정을 통해 저장할 내용을 stage로 올린다.(사진찍기 위해 준비하는 것)

 이후 commit이라는 과정을 통해 local repo 에 저장한다.(사진은 찍는 것)

 

- stage는 local repo로 들어가기 전에 작업물이 들어가 있는 완충공간!

- stage에 올리는것이 add, local repo에 올리는 것이 commit이라고 보면 된다.

- local repo에 최종적으로 저장된다.(찍어놓은 사진들을 저장하는 사진첩 역할)

 

 

- RESET 종류별 차이는 위와 같다. 3군데에 저장되는 코드를 얼마나 남기고 얼마나 지우느냐의 차이.

- hard는 전부 다 지우고 / mixed는 2개만 지우고 / soft는 local repo에 들어간 내용만 지운다.

 

- 또한 저장소에는 로컬 저장소만 있는 것이 아니다.

 로컬 저장소가 있다면? 원격 저장소도 있다. (remote repository)

- 대표적인 원격 저장소 역할을 하는것이 git hub이다. 

 인터넷 공간의 특정 위치에 작업물의 commit 이력을 올려둘 수 있다.
 데이터 활용이 편리하고, 인터넷을 통해 타인의 코드를 내려받아 소셜코딩도 가능하다.