2장 : 깃으로 버전 관리하기

1. 깃 저장소

  • 깃 초기화 하기
    • 디렉토리를 하나 새로 만들고 내부를 살펴본 뒤 git init을 하면 .git이라는 디렉토리가 새로 생긴다.
    • .git : 깃을 사용하면 버전이 저장될 ‘저장소’
    $ mkdir hi-git
    $ cd hi-git
    $ ls -al
    $ git init
    $ ls -al
    

2. 버전 만들기

  • 깃에서 버전이란
    • 문서를 수정하고 저장할 때마다 생기는 것
    • 원래 파일 이름은 그대로 유지하면서 파일에서 무엇을 변경했는지를 변경 시점마다 저장할 수 있다.
    • 각 버전마다 작업했던 내용을 확인할 수 있고, 그 버전으로 rollback할 수 있다.
  • 스테이지와 커밋 이해하기
    • 작업트리 :: workspace
      • 파일 수정, 저장 등의 작업을하는 디렉토리
    • 스테이지 :: index
      • 버전으로 만들 파일이 대기하는 곳
      • 명령어
      $ git add [파일 또는 디렉토리]
      
    • 저장소 :: local repository
      • 스테이지에 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳
      • 명렁어
      $ git commit -m "커밋 메시지 입력"
      
    • 순서
      1.작업트리에서 작업을 한다.
      2.작업물을 스테이지에 올린다.
      3.스테이지에 있는 모든 것을 로컬 저장소에 저장한다.
    • 스테이징과 커밋 한꺼번에 처리하기
      • 한 번이라도 커밋한 적이 있는 파일을 다시 커밋할 때 사용할 수 있다.
      • git commit -am "커밋 메시지"
    • 현재 깃 상태 확인 :: git status
    • 깃의 로그 확인 :: git log
      • 여러가지 옵션을 줄 수 있다.
      • 대표적인 옵션 :: –oneline, –branches, –graph
    • 변경 사항 확인하기 :: git diff
      • 작업 디렉토리와 저장소의 차이를 볼 수 있다.
        이미지 대체
  • 버전 만드는 단계마다 파일 상태 알아보기
    • tracked 파일과 untracked 파일
      • untracked 파일 :: 한번도 깃에서 버전 관리를 하지 않았기 때문에 수정 내역을 추적하지 않음.
      • tracked 파일 :: untracked 파일이 아닌 파일
    • unmodified, modified, staged 상태
      • tracked 파일의 상태 확인
      • unmodified : 커밋된 이후 수정되지 않은 상태
      • modified : 커밋된 이후 수정된 상태
      • staged : modified 상태에서 git add [파일 또는 폴더]를 실시하여 스테이지에 올려놓은 상태(커밋 직전의 상태)
      • 커밋을 실시하면 unmodified 상태로 돌아간다.
        이미지 대체
  • .gitignore 파일로 버전 관리에서 제외하기!
    • 버전 관리 중인 디렉토리 안에 버전관리를 하지 않을 특정 파일 또는 디렉토리가 있다면 .gitignore 파일을 만들어 목록을 지정할 수 있다.
    • 예시
    $ cat .gitignore
    mynote.txt # 파일을 ignore
    temp/ # 폴더를 ignore
    .swp # 확장자를 ignore
    
  • 작업 되돌리기(Rollback)
    • 작업트리에서 수정한 파일 되돌리기 :: git checkout -- [수정한 파일]
      • checkout으로 되돌린 내용은 다시 복구할 수 없습니다.
    • 스테이징 되돌리기 :: git reset HEAD [파일이름]
      • 수정된 파일을 스테이징 했을 때, 스테이징을 취소한는 방법
    • 최신 커밋 되돌리기 :: git reset HEAD^
      • 가장 마지막에 한 커밋을 취소하는 방법
      • git reset 명령의 옵션
        • git reset --soft HEAD^ : 최근 커밋을 하기 전 상태로 작업 트리를 되돌립니다.
        • git reset --mixed HEAD^ : 최근 커밋과 스테이징을 하기 전 상태로 작업 트리를 되돌린다. 기본값
        • git reset --hard HEAD^ : 최근 커밋과 스테이징, 파일 수정을 하기 전 상태로 작업 트리를 되돌린다. 되돌린 내용은 복구 불가능
        • HEAD^ 부분에 커밋해시를 넣어주면 특정 커밋 상태로 되돌아갈 수 있습니다.
      • 특정 커밋으로 되돌아간다면 그 이후의 버전을 삭제할 수 있다.
    • 버전 삭제하지 않고 되돌리기 :: git revert [커밋 해쉬를 넣는다]
      • 나중에 사용할 것을 대비해서 커밋을 되돌리더라도 취소한 커밋을 남겨두어야 할 때가 있다.
      • 이때는 git reset이 아닌 git revert를 사용한다.
        이미지 대체