2. 참고 자료
• <컴퓨터 vs 책> 블로그
• http://jhrogue.blogspot.com/
• OKdevTV 유튜브 방송
• 오늘 방송:
• https://www.youtube.com/watch?v=SJDkYQJqRkA&list=PLdntWJk2tJPLKNNYBVC
xnde2PEB6dzbSL&index=7
• 5분 따라하기 리스트:
• https://www.youtube.com/playlist?list=PLdntWJk2tJPLKNNYBVCxnde2PEB6dzbSL
• 슬라이드 셰어
• https://www.slideshare.net/jrogue/presentations
• ASCIINEMA
• https://asciinema.org/~jrogue
3. 오늘 소개할 내용
• git을 사용하다 보면 실수할 때가 있기 마련이다.
• 시나리오 1: git add를 했는데, 불필요한 파일이 포함되었어요. add를 취소
할 수 없을까요? (주의: 두 가지 사례로 나뉘어짐)
• 시나리오 2: git commit을 했는데, 불필요한 파일이 포함되었어요. 커밋을
취소할 수 없을까요?
• 시나리오 3: git push를 했는데... (다음 시간에~~~)
4. 몇 가지 힌트(1)
• git에서 HEAD
• 특수한 포인터 → 지금 작업 중인 로컬 브랜치를 가리킴(브랜치가 없을 경우
master를 가리킴)
• 또는 마지막 커밋 스냅샷, 다음 커밋의 부모 커밋
• ~ vs ^: ~는 linear, ^는 tree나 fork의 원하는 세그먼트(merge 경우)
• ~ == ^ if 부모가 하나인 경우라면
• git에서 Index
• 바로 다음에 커밋할 내용 → staging area라고 부르며, git commit 명령을
실행할 때 반영할 내용을 담고 있음
• git에서 작업 디렉토리
• 현재 우리가 shell에서 볼 수 있는 디렉토리
5. 몇 가지 힌트(2)
• 우리는 HEAD를 이동하면서 원하는 상태에 이른다
• HEAD 이동에 사용하는 명령은? 바로 git reset!
• reset의 옵션 세 가지
• --mixed(default): HEAD로 브랜치를 옮기고, Index를 HEAD가 가리키는 상태로 만
들고, 작업 디렉토리는 현 상태로 유지한다.
• --soft: HEAD로 브랜치를 옮기고, Index를 현 상태로 유지하고, 작업 디렉토리도 현 상
태로 유지한다.
• --hard: HEAD로 브랜치를 옮기고, Index를 HEAD가 가리키는 상태로 만들고, 작업 디
렉토리도 HEAD가 가리키는 상태로 만든다.
• 주의: 새 마음으로 최종 커밋 상태부터 다시 시작하려면?
• $ git reset --hard HEAD
• 참고 자료: https://git-scm.com/book/ko/v2/Git-
%EB%8F%84%EA%B5%AC-Reset-
%EB%AA%85%ED%99%95%ED%9E%88-
%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0
6. 스크립트
$ mkdir undo
$ cd undo
$ git init
$ touch right.txt
$ touch wrong.txt
$ git add .
$ git status
$ git reset HEAD wrong.txt
$ git rm –cached wrong.txt
$ git status
$ git commit -m "first commit"
$ git status
$ git add .
$ git status
$ git reset HEAD wrong.txt
$ git status
$ git add .
$ git commit -m "wrong file committed“
$ git log
$ git reset --mixed HEAD^
$ git status
$ git log
명령행에서 직접 실행