Unmodified/Modifed/Stage일 경우: 이 파일이 Git에 의해 관리가 되고 있다.
Untracked일 경우: 이 파일은 Git에 의해 관리가 안되고 있다. (= 방금 추가한 파일이거나 쓸모없는 파일임을 추측 가능)
Modified일 경우: 이 파일은 변경되었다. 변경되었다고 기록을 해야 한다.
Unmodified일 경우: 이 파일은 저번에 저장한 파일과 비교해보니 그대로이다.Git이 관리해주는 파일(Tracked File)은 다시 한번 더 파일의 상태를 3개의 상태로 세분화해서 관리합니다.
Unmodified: 파일이 수정되지 않은 상태 (= 파일이 최근에 저장한 상태 그대로임)
Modified: 파일이 수정된 상태 (= 파일이 최근에 저장한 파일과 달라짐)
Staged: 파일을 저장할 예정인 상태 (= 이 파일을 저장할 것이라는 뜻)
이러한 세분화된 상태들을 보고 우리들은 다음과 같은 정보를 알 수 있습니다.
Untracked File이란?
Untracked File은 이 파일이 Git 저장소에는 있지만 Git에 의해서 관리되고 있지 않은 파일입니다. Unmodified/Modifed/Stage이 세 가지 외의 상태는 모두 Untracked입니다. Untracked File은 삭제되든 변형이 일어나든 Git이 추적하고 있지 않기 때문에 손상되었을 때 Git으로 복구할 수 없습니다.
Git이 파일을 분류하는 방법에 대해서 알아봤습니다. 우리가 Git으로 관리되는 폴더에 넣어준 모든 파일은 이렇게 관리가 됩니다. 이제 이러한 Git이 분류해주는 파일의 상태를 확인하는 명령어를 배워봅시다.
add를 통해서 untracked 상태에서 벗어날 수 있다.
git commit -a -m “commit_name”
-a 는 auto adding이다. 하나하나 파일들을 add 하기 귀찮을 때 사용
이렇게 할 때 untracked된 파일은 commit 되지 않는다.
한번이라도 add를 한 tracked 된 파일에 대해서만 auto adding이 된다.
= git commit -am “commit_name”
add의 의미
commit 대기 상태를 만든다.
untracked를 tracked로 만든다
.gitignore
password나 오픈하면 안되는 정보들을 이 파일에 목록들을 저장해둔다.
여기에 들어가있는 곳은 기록된 파일들은 없는셈친다.
checkout은 head를 옮기고, reset은 head가 가리키는 branch를 옮긴다.
git reset —hard이전에 했던 commit으로 checkout하는 것과의 차이점은?취소를 한다고 하더라도 git은 삭제하지 않기 때문에 git reflog를 사용해서 삭제된 과거의 commit의 id로 갈 수 도 있다.
git은 working directory를 고려하지 않는다. commit을 하기 전에 stage에 올라간 것만 확인하고 commit한다.
master는 마지막 작업을 가르킨다.
head는 현재 작업을 가르킨다.
(head→master 가 아닐 경우)새 버전의 부모는 Head다.
detached head state라고 한다.
(head→master 일 경우) master 와 head는 새로운 버전을 가르킨다.
마지막 커밋으로 직접 head를 움직여줬다면 마스터는 헤드를 따라오지 않기 때문에 오류가 생길 수 있기 때문이다. 따라서 마지막 거로 갈거면 git checkout master를 써서 마스터로 head를 마스터를 가르키도록 만들어 줘라
깃은 어떠한 버전도 지우지 않고 수정하지 않는다. = 불변성 = 안정성
이전 작업으로 가고 싶다면
git chechkout “이전 작업의 주소”
실험이 끝났다면 master가 exp branch를 병합한다.
마스터에서 exp를 병합하기 위해서는 우선 head → master인 상태가 되어야 한다.
그 후 Merge 합니다.
Merge한 버전의 parent는 master1, exp1 이다. 즉, master와 병합한 branch이다.
master에 merge한 결과를 과거로 돌리고 싶다면 reset을 하면 된다.
exp가 master를 병합한다. => master를 업데이트 한다. 실험이 끝났다면, master가 exp(branch)를 병합한다. -> 'merge' into current branch 새로운 version의 부모는 master, exp(branch)이며 master는 새로 만들어진 version을 가리킨다. 병합을 취소하려면 'reset' current branch