a.txt에 E를 추가하고 git diff를 입력하면 +E가 표시된 것을 볼 수 있다.

최근 커밋과 비교했을 때 문자 E가 추가됐으니 +E가 출력된다.
스테이지에 추가된 항목과 최근 커밋의 차이를 보여주는 명령은 git diff --cached 또는 git diff --staged이다.
커밋 간 차이를 비교하는 명령은 git diff <이 커밋을 기준으로 > <이 커밋이 달라진 점>이다.
!HEAD는 현재 브랜치의 최신 커밋을 가리킨다.!
-HEAD^또는 HEAD~1은 현재 브랜치의 최신 커밋에서 하나 이전 커밋을 가리킨다.
-HEAD^^또는 HEAD~2는 최신 커밋에서 두개 이전 커밋을 가리킨다.
=>HEAD뒤에 붙는 ^의 개수 또는 HEAD~뒤에 붙는 숫자는 'HEAD에서 몇번째 이전을 나타내는지'를 의미한다.
=>git diff HEAD^ HEAD^^ 이렇게 사용하기
git diff <기준이 되는 브랜치> <기준과 비교할 브랜치>
변경사항 또는 버전을 되돌리는 방법에는 크게 reset와 revert가 있다. reset은 다음과 같이 나뉜다.
1.soft reset
2.mixed reset
3.hard reset
1.git reset <되돌아갈 커밋>:예전 커밋으로 되돌아가기
reset은 저장소를 특정 커밋으로 완전히 되돌리는 방식이다.
1)soft reset : 커밋단계'만' 되돌리기
ex)네번째 커밋이 a.txt파일에 D를 추가한 것이다. 이를 세번째 커밋으로 soft reset한다면 a.txt파일에 D를 추가한 뒤 '스테이지로 추가한 순간'으로 돌아간다.
=>git reset --soft <되돌아갈 커밋>
2)mixed reset:(스테이지에 추가+ 커밋한 사실)을 없앤다.
git reset <되돌아갈 커밋> 또는 git reset --mixed <되돌아갈 커밋>
[아무옵션 없이 git reset명령을 사용하면 mixed reset이다. ]
-커밋한 사실과 스테이지에 추가한 사실만을 되돌릴 뿐 파일을 수정한 내역까지 되돌리지는 않는다.
3)hard reset: 파일을 수정했던 사실까지 완전하게 되돌리는 방식이다.
git reset --hard <되돌아갈 커밋>
*git revert <취소할 커밋>:취소된 새로운 커밋 만들기
revert는 해당 커밋을 취소한 새로운 커밋을 추가하는 방식.
1.git stash:변경사항 임시 저장하기
gis stash만 입력해도 작업이 임시 저장되지만, git stash -m "메시지"또는 git stash --message"<메시지>"명령으로 간단한 메시지와 임시저장 가능하다.
이렇게 입력하면 방금 수정했던 내용은 없어지고(임시저장됨) 첫 커밋을 만든 상태로 돌아간다.
2.git stash list:임시 저장된 작업 내역 조회하기
스태시한 작업목록을 조회하는 명령은 git stash list이다.
stash@{0}: On master: add C
stash@{1}: On master: add B
이런식으로 뜨는데 최근에 저장된 작업일수록 숫자가 작다.
3.git stash apply<스태시>:임시 저장된 작업 적용하기
이 명령어는 스태시에 임시저장된 작업을 작업 디렉터리에 적용하는 명령이다.
stash@{0}를 적용하는 명령어는 git stash apply stash@{0}이다.
스태시 이름을 명시하지 않고 git stash apply를 입력할 경우 최근에 임시저장한 stash@{0}가 적용된다.
4.git stash drop<스태시>:임시 저장된 작업 삭제하기
이 명령어는 스태시 내의 임시 저장된 작업을 지우는 명령이다.
stash@{0}를 스태시에서 삭제하는 명령은 git stash drop stash@{0}이다.
!여기서!git stash clear는 임시 저장된 작업을 전부 삭제하는 명령이다.

(master)표시는 현재 작업 중인 브랜치가 master 브랜치임을 나타내는 것이다.또는 git branch명령을 입력하면 현재 브랜치의 목록과 내가 작업 중인 브랜치가 *로 표시된다.
1.git branch<브랜치>:브랜치 나누기
브랜치를 만드는 명령은 git branch<브랜치>이다. foo라는 브랜치를 만드는 명령은 git branch foo이다.
2.git checkout<브랜치>:체크아웃 하기
체크아웃:해당 브랜치로 작업 환경을 바꾸는 것
특정 브랜치로 체크아웃하는 명령은 git checkout <브랜치>이다.

현재 브랜치 상태이다. master브랜치에는 커밋 세 개가 쌓여 있고, foo브랜치에는 커밋 다섯 개가 쌓여 있다.
_!여기서!브랜치를 만듦과 동시에 체크아웃 하기
3.git merge <브랜치>:브랜치 병합하기
foo브랜치를 master브랜치에 병합해 보겠다. 만일 foo 브랜치를 master브랜치에 병합하고 싶다면 master브랜치로 체크아웃 한 뒤에 git merge foo를 입력하면 된다.
4.충돌 해결
브랜치를 병합할 때 충돌이 발생할 수도 있다.

(master)가 아닌 (master|MERGING)으로 뜬다. 이는 '현재 충돌이 발생했으니, 이를 해결하고 다시 커밋하여 병합을 완성하라'는 의미이다.
=>충돌이 일어났을 때 충돌이 발생한 브랜치 중 어떤 브랜치의 내용을 최종적으로 반영할 지 직접 선택한다. 어떤 내용을 반영할 지 직접 선택한 뒤 충돌이 발생한 파일을 스테이지에 추가하고 커밋하면 병합이 완료된다.
5.git branch -d <브랜치> :브랜치 삭제하기
git branch -d <브랜치> 또는 git branch --delete<브랜치>이다.
만약 어떤 브랜치를 삭제하려면 삭제하려는 브랜치가 아닌 브랜치로 체크아웃 해야한다.
6.git rebase<브랜치>:브랜치 재배치하기
rebase : 명령어로 브랜치 재배치 함
브랜치의 재배치 : 브랜치가 뻗어나온 기준점을 옮기는 방법