본문 바로가기

Git

Git local 저장소 다루기

[ Git 저장소 만들기 ]

  • 기존 디렉토리를 Git 저장소로 만들기

    git init

  • 다른 서버에 있는 저장소를 Clone하기

    git clone

[ 수정하고 저장소에 저장하기 -  git 에서의 파일의 LifeCycle ]

Working Directory의 모든 파일은 Tracked와 Untracked로 나뉘게 된다.

Tracked : 이미 스냅샷에 포함 되어 있던 파일. ( 즉, git의 관리 대상이 되는 파일 )

  • Unmodified : 수정 되지 않음.
  • Modified : 수정됨.
  • Staged : 스냅샷에 추가 됨. 즉, 커밋할 파일에 변경 사항이 추가 되었다는 것을 의미한다.

Untracked : 아예 Git의 관리 대상이 아닌 파일

"Changes to be committed" 에 들어가 있는 파일은 Staged 상태에 들어와 있는 것들이다.

"Changes not staged for commit"에 들어가 있는 파일은 Tracked 상태이지만 아직 Staged 상태는 아닌 것을 의미한다.

 

핵심 : git add를 이해하자 !!

git add 명령은 파일을 새로 추적할 대도 사용하고 수정한 파일을 Staged 상태로 만들 때도 사용한다. Merge 할 때 충돌난 상태의 파일을 Resolve 상태로 만들 때도 사용한다.

add의 의미는 프로젝트에 파일을 추가한다기 보다는 다음 커밋에 추가한다고 받아 들이는 것이 좋다.


[ 파일 무시하기 - .gitigonre ]

.gitignore 파일은 보통 처음에 만들어 두는 것이 편리하다. 그래서 Git 저장소에 커밋하고 싶지 않은 파일을 실수로 커밋하는 일을 방지할 수 있다.

 

github/gitignore

[ Staged 와 Unstaged 상태의 변경 내용을 보기 - git diff ]

git diff → Unstaged 상태의 파일 들만 비교한다.( 즉, working driectory의 파일들과 Staginf Area의 파일들을 비교한다. )

git diff -cached → 저장소에 커밋한 것과 Staging Area에 있는 것을 비교한다.

[ 변경 사항 Commit 하기 ]

→ git commit

[ 파일 삭제 하기 ]

Git 에서 파일을 삭제 제거하려면 git rm 명령으로 Tracked 상태의 파일을 삭제 한 후에(정확하게는 Staging Area에서 삭제하는 것) 커밋 해야 한다. 이 명령은 워킹 디렉토리에 있는 파일도 삭제하기 때문에 실제로 지워진다.

→ git rm

Staging Area에서만 제거하고 워킹 디렉토리에 있는 파일은 지우지 않고 남겨 둘 수 있다. 즉, 하드디스크에 있는 파일은 그대로 두고 Git만 추적하지 않게 한다.

→ git rm --cached

[ 파일 이름 변경하기 ]

git mv [ file_from - 이전 파일 이름 ] [ file_to-이후 파일 이름 ]

git mv README.md README 명령어는

  1. mv README.md README
  2. git rm README.md
  3. git add README

3개의 명령어를 수행 한 것과 완전히 같다.

[ 커밋 히스토리 조회하기 ]

git log

→ 포멧

→ 제한 조건을 이용한 옵션들이 존재한다.

[ 되돌리기 - Undo ]

한번 되돌리면 복구 할 수 없기 때문에 신중해야 한다.

  • 완료한 커밋을 수정해야 할 때 ( 덮어 쓰기 )

    → git commit —ammend

  • 파일 상태를 Unstage 상태로 변경하기

    → git reset HEAD

  • Modified file 되돌리기

    → git checkout —

    → git checkout — [file]명령은 원래 파일로 덮어 쓰는 것이기 때문에 수정한 내용은 전부 사라진다. 수정한 내용이 진자 마음에 들지 않을 경우에만 사용하도록 하자.

  • Git 으로 커밋한 모든 것은 언제나 복구 할 수 있다. 하지만 커밋하지 않고 잃어버린 것은 절대로 되돌릴 수 없다.