git의 기본 사용법과 원리

 

1. git이란?

Version Control System 

 

2. 지역 저장소와 원격 저장소

3. Staging Area란?

 

>git add 파일이름 <- Staging Area에 파일 추가

 

 

4. Staging Area관련 명령

 

- 도움말 보기

> git 명령어 -h : 명령어에 대한 도움말

> git 명령어 --h : 자세한 도움말

> git --help : 모든 도움말

 

- Staging Area에 추가

> git add 파일이름

> git add 파일이름1 파일이름2

> git add 폴더이름 : 지정된 폴더 내의 모든 파일 추가

> git add * : 현재 폴더에 있는 모든 파일 또는 폴더 추가(빈 폴더 제외)

> git add -u : 커밋한 적이 있는 모든 파일 추가(해당 파일이 커밋 이력에 있어야함)

 

- Staging Area에서 삭제

> git rm --cached 파일이름

> git reset 파일이름

> git reset : 현재 폴더의 모든 폴더와 파일을 Staging Area에서 삭제

 

- Working Directory와 Staging Area의 상태를 확인

> git status

 

[주의] 파일을 삭제할 때, working directory에서 직접 삭제하지말고 git을 통해 삭제해야 이력이 관리된다.

> git rm aaa.txt

> git commit -m 'delete aaa.txt' : 삭제 이력을 남기기 위한 커밋

 

5. 커밋(commit)이란? 

하나의 이력으로 남는 것

 

6. 커밋 관련 명령

 

커밋 생성하기 

> git commit -m "initial commit" : ""안에 커밋에 대한 설명을 적는다.

> git show HEAD : 최근 커밋에 대한 상세 정보를 보여준다.(소문자 head도 가능)

> git log

 

커밋 수정하기(사실 새로운 커밋을 생성하는것)

> git commit --amend : 최근 커밋의 내역을 볼 수 있다.(커밋 메세지 수정가능)

> git commit --amend -sm "변경된 메세지" : 커밋 메세지만 수정하고 싶을 때

 

취소 커밋 생성하기

> git revert HEAD : 최근 커밋을 취소하는 새로운 커밋을 생성.

 

[참고] git commit --amend는 아무것도 변경안해도 커밋ID가 달라진다.

git reflog로 확인 가능.

 

 

7. 커밋 수정하기

commit의 사이즈를 적절하게 정해야 함

 

8. HEAD와 reset 

 

HEAD : 현재 보고 있는 커밋이 어떤 커밋인지 알 수 있게 해줌

 

reset --hard : 커밋뿐만 아니라 working directory까지 되돌림

 

 

커밋 ID를 알면 reset --hard를 통해 HEAD를 옮길 수 있음

 

(커밋은 자기 이전의 커밋을 가리키고 있음)

 

 

 

커밋을 수정하면 새로운 커밋이 생성됨

수정하기 전의 커밋은 변경되지 않고 기록으로 남아있게 됨 (그림에서 파일 2개짜리 커밋 부분)

 

 

tracked file : git이 관리하는 파일

untracked file : git이 관리하지 않는 파일

 

 

9. git log와 커밋 ID

> git log : 자세한 로그. 커밋 아이디가 길게 나옴

> git log --oneline  : 간략한 로그. 커밋 아이디가 짧게 나옴(6자리)

> git shortlog : 아주 간략한 로그. 커밋 아이디 안 나옴

> git show  : 커밋 ID 특정 커밋의 상세 정보(브랜치 지정가능)

> git reflog : HEAD가 가리켰던(ref) 커밋의 이력(log)을 보여줌

> git reflog 브랜치명 : 브랜치별로 reflog를 보여줌

> git log - g : reflog를 상세히 보여줌

 

10. reflog

 

HEAD가 이동한 history를 보여줌

> git reflog 

 

11. git이 파일을 관리하는 방식

 

파일 이름 대신 object id로 파일을 관리한다

커밋 당시의 실제 파일 대신 object id의 목록만 저장(파일은 별도로 저장)

즐겨찾기 목록만 저장하듯이 object id만 관리하면 되기 때문에 적은 용량으로 파일 관리가 가능함

 

 

12. branch

 

 

dev라는 이름의 브랜치를 생성

> git branch dev

 

 

dev 브랜치로 HEAD를 이동

> git checkout dev

 

 

커밋을 하면 HEAD와 branch가 같이 이동 (dev의 가지로 뻗어가는 것 같음)

 

 

13. fast-forward merge

 

merge는 두 브랜치가 가리키고 있는 커밋을 합치는 것 (새로운 커밋 X)

 

 

14. no fast-forward merge

 

무조건 새로운 커밋 생성

 

 

15. merge conflict 

 

16. reset vs. checkout

detached HEAD : 브랜치로부터 분리된 HEAD

 

 

17. git의 브랜칭 전략

 

 

+ Recent posts