index.html에 <h1>hello GIT world!<h1> 만 추가하여 저장한다.
파일을 수정한 후에는 modified: index.htm메시지가 출력된다.
왼쪽의 파일상태 탭을 선택하면 스테이지에 올라가지 않은 파일 목록에 방금 수정된 파일이 다시 등록된 것을 알 수 있다.
파일을 수정하면 modified 상태로 변경된다.
파일 수정 전 상태로 되돌리고 싶다면 $ git checkout -- 수정파일이름을 입력하면 된다.
수정파일을 되돌리면 커밋 이후에 작업한 수정내역은 모두 삭제합니다.
파일을 수정하면 해당 파일은 modified 상태로 변경되고 다시 워킹디렉터리로 이동한다.
파일이 수정되면 반드시 add명령어로 스테이지 영역에 재등록해야한다.
$ git add 수정파일이름

커밋과 동시에 간단하게 한 줄짜리 커밋 메시지를 작성할수 있다.(-m 옵션)
$ git commit -m "커밋메시지"

-a 옵션은 commit 명령어를 실행하기 전에 워킹 디렉터리에 있는 파일을 스테이지 영역으로 등록한다.
-m 옵션은 간단한 커밋 메시지를 함께 등록한다.
-am 옵션은 파일등록과 한줄짜리 커밋 메시지 등록을 동시에 처리한다.
$git commit -am "커밋메시지"
-a 옵션은 이미 추적된 파일 상태가 되었을때만 함께 사용이 가능하다.
저장소를 새롭게 생성하고, 새파일을 작성한 후라면 -am옵션을 사용하여 커밋 할 수 없다.
=> -am 명령어를 사용하기전에 먼저 add 명령어를 수행해야 한다.
소스트리 목록에는 커밋 메시지의 첫번째 요약줄만 표시된다.

터미널에서 메시지가 없는 빈 커밋을 작성하려면 --allow-empty-message 옵션을 사용한다.

커밋 메시지 입력란을 비워 놓고 커밋을 누르면 된다.



방금 전에 작성한 커밋 메시지를 수정하기 위해서는 --amend 옵션을 사용한다.
$ git commit --amend
커밋 아이디는 특정 커밋을 가리키는 절대적 이름이고 명시적 참조 값이다.
커밋 아이디는 다수의 커밋을 구분할 수 있는 키이며, 브랜치나 태그 등에도 많이 사용한다.
커밋 아이디가 복잡한 영어와 숫자로 된 이유는 깃이 SHA1이라는 해시 알고리즘을 사용하기 때문이다.
깃은 스테이지 영역의 변경된 내용을 기반으로 SHA1 해시키를 생성한다.
SHA1 해시는 중복되지 않은 고유의 키를 생성할 수 있는 장점이 있다.
깃이 SHA1해시를 이용하는 이유는 콘텐츠 추적과 분산형 저장관리를 운영하면서 충돌을 방지하기 위해서이다.
해시의 앞쪽 7자만으로도 중복을 방지하면서 전체 키 값을 사용할 수 있다.
로그 옵션 중에서 --pretty=short를 사용하면 로그를 출력할 때 첫 번째 줄의 커밋 메시지만 출력한다.

특정 커밋의 상세정보를 확인하고 싶으면 show명령어를 사용한다
$ git show 커밋ID
특정 파일의 로그 기록만 보기 위해서는 log 명령어 뒤에 파일이름을 적어주면 된다.
깃은 커밋을 기준으로 파일들의 수정 이력을 비교해 볼 수 있는 diff기능을 제공한다.
diff 기능으로 파일의 수정 및 변경 내역을 쉽게 파악할 수 있다.
add 명령어로 파일을 추가하지 않은 경우, 워킹 디렉터리와 스테이지 영역 간 변경 사항을 비교할 수 있다.
index.htm에 h2태그를 추가 후 diff명령어 사용
워킹 디렉터리 내용과 스테이지 내용의 차이점을 출력한다.
변경한 파일을 add명령어로 추가하여 스테이지 영역에 등록한 후 diff명령어 수행하면 아무 내용도 출력되지 않는다.
등록 과정을 거쳐 워킹 디렉터리의 수정 내역을 스테이지 영역에 반영했기 때문이다
스테이지 영역에 있는 수정된 파일을 아직 커밋하지 않았다면 최신커밋과 변경내용을 비교할 수 있다.

HEAD는 최근 커밋 중 가장 마지막 커밋의 위치를 가리키는 값으로 HEAD를 이용하면 최신커밋과 이전커밋을 비교하여 출력할 수 있다.

+표시는 새롭게 추가된 내용의 의미하고 녹색으로 표시된다.
-표시는 삭제된 내용을 의미하고 붉은 색으로 표시된다.
커밋 메시지를 작성할 때 -v 옵션을 같이 사용하면 vi에디터에서 diff내용을 추가할 수 있다.
$ git commit -v
