- 하나의 버전은 모든 변경사항들을 포괄 할 수 있음
- Uncommitted changes가 뜬다면 커밋할 무엇인가가 있다는 의미.
(즉, 로컬 래파지토리에 변화가 일어났다는 것을 의미.)
Unstaged files
로컬 래파지토리에서 수정된 파일이 존재하는 공간 --> Working copy
체크를 하게 되면 Staged files로 이동하게 된다.
Staged files
커밋이 되었을경우 버전으로 생성될 파일들을 갖고 있는 공간 --> Index 또는 Staging area
Unstaged files에서 Staged files으로 이동(체크)하는 행위를 의미하는 용어 -->add
커밋을 하게 되면 Staged files에 있던 파일들을 저장소로 올리게 되는데, 그러면 버전이 하나 생성된다.
각각의 버전들이 저장되어있는 공간을 Repository 즉 저장소라 부름.
즉, working copy 공간에 있는 파일들은 무시되고, index에 존재하는 파일들만 Commit할 수 있다.
정리하면, 아래와 같은 상황일때;.
Uncommitted changes 이 맨 위에 뜬다면, 로컬 래파지토리에 뭔가 변화가 생겼다는 것을 의미한다.
클릭을 해보면 밑에 변화된 파일들의 목록이 나오게 된다.
여기서 변화란 기존에 있는 코드의 수정일 수도 있지만, 파일 생성 또는 제거를 한 것도 포함된다.
아래에서는 index.html파일만 커밋하기 위해 한 개만 add시켰다.
하나의 파일이어도 index(staging area)에 올려져있는 파일을 수정하면 Working copy에 동일한 이름의 파일이 생성된다. 즉, 동일한 파일이어도 위치에 따라 코드가 다를 수 있다.
그리고 커밋을 하면 index(staging area)에 올려진 코드는 커밋되지만, Working copy에 있는 파일은 그대로 남아있다.
<커밋 전에 수정사항 취소하기>
Discard
Discard라는 명령어를 사용하게 되면 이전 버전 이후 변경한 내용을 모두 되돌려 초기화시킨다.
즉, 가장 최근에 커밋한 상태로 되돌아간다.
흔히 말하는... 코드가 꼬이거나, 원인모를 문제가 발생할경우 사용하면 처음으로 되돌리는 용도이다.
Reset : 버전을 제거하면서 내가 원하는 버전으로 되돌림
종류 : Mixed / Hard / Soft
이미 커밋한 버전을 취소하는 방법은 Reset을 사용한다.
A) 내가 돌아가고 싶은 버전으로 돌아가면서 그 버전 이후의 모든 것들을 제거하고 싶다면?
Q) 브랜치 그래프에서 자신이 돌아가고 싶은 부분(버전)을 클릭한 다음 마우스 오른쪽 클릭 - Reset current branch to this commit을 선택한 후 Using mode 를 설정한다.
Hard - discard all working copy changes 를 선택한 후 OK를 누르면 경고창이 한 번 뜬다.
모두 지울것이므로 진짜 지울거냐고 물어보는 것이다. 이것은 마치 휴지통 비우기와 비슷한 것 같다. 완전히 날려버림....
모든 일이 끝나고 확인하면 해당 부분의 코드로 돌아온 것을 알 수 있다.. 그 이후 수정 버전은 모두 제거되었다...
조심히 쓰자.
내가 돌아가고 싶은 버전으로 돌아가면서 그 버전 이후의 모든 것들을 제거하고 싶다면?
+ Working copy에 커밋되지 않은 상태로 유지되게 만들고 싶다면
Q) 브랜치 그래프에서 자신이 돌아가고 싶은 부분(버전)을 클릭한 다음 마우스 오른쪽 클릭 - Reset current branch to this commit을 선택한 후 Using mode 를 설정한다.
Mixed - keep working copy but reset index 를 선택한 후 OK를 누르면 진행된다.
커밋되기 전에 상태 그대로 Working copy로 나타나면서 다른 버전들은 모두 제거된다.
Revert(Reverse) : 버전을 유지하면서 내가 원하는 버전으로 되돌림
내가 선택한 그 버전을 취소해서 그 버전 이전 상태로 돌리는 것을 의미한다.
안 하는 게 낫다. 왜냐하면 버전은 그냥 되도록 남겨두는것이 좋다.
제거되는 것이 아니라 이전 버전 상태로 돌아가게 된다.