Git에 관한 좋은 자료들
1. Git Pro Book : https://git-scm.com/book/ko/v2/
2. 누구나 쉽게 이해할 수 있는 Git 입문 : https://backlog.com/git-tutorial/kr/
3. Git Tutorial : https://www.slideshare.net/ThomasRausch4/git-introduction-tutorial
Git의 데이터 관리법 : 스냅샷
- GIt은 데이터를 파일 시스템 '스냅샷'으로 취급.
- 파일이 달라지지 않았다면 파일을 새로 저장하지 않음. 단지 이전 상태의 파일에 대한 링크만 저장
- 아마도... 위의 이미지에서 보면 ver1~ver5까지 있는데, Git은 아래와 같이 작동하나봄.
ver1 : 'File A, B, C가 있구나'
ver2 : 파일A는 A1으로, 파일C는 C1으로 바뀌었군. 파일B는 바뀐거 없음ㅋ
ver3 : 파일A,B는 바뀐거 없음ㅋ C는 C2로 바뀌었음
==> 이런식으로, 현재의 스냅샷(정보? 상태?)로 기억함 ==> 효율적.
Git의 무결성
- Git은 데이터를 저장하기 전 항상 체크섬(Checksum)을 구하고 그 체크섬으로 데이터를 관리
- 체크섬(Checksum) : Git에서 사용하는 가장 기본적인 데이터 단위.
세 가지 상태
1. Committed : 데이터가 로컬 DB에 안전하게 저장됐음
2. Modified : 파일을 수정했는데 로컬 DB에 커밋하기 전
3. Staged : '수정한 파일 곧 커밋할게'라는 표시
세 가지 단계
1. Working Directory : 프로젝트의 특정 버젼을 checkout한 것.
- Working directory에서 파일을 수정함
2. Staging Area : 곧 커밋할 파일에 대한 정보 저장.
- Staging area에 파일을 stage해서 커밋할 스냅샷을 만듦
3. .git Directory (Repository) : ...
- Staging area에 있던 파일들을 커밋해서 Git 디렉터리에 영구적인 스냅샷으로 저장
파일의 라이프 사이클
- Untracked : 관리대상X. 스냅샷에 포함 안 된 애.
워킹디렉토리에 있고, staging area에도 올라가지 않은 애.
- Tracked : 관리대상 O. 스냅샷에 포함된 애.
Unmodified (수정X), Modified(수정O), Staged(커밋예정이지만 아직 커밋은 안했음)로 구분됨.
CLI 명령어
$ git init
- 이 위치의 폴더를 git으로 관리를 시작하겠다는 뜻.
- .git이라는 하위 디렉토리가 생성된다. (숨긴 파일이라 파일탐색기 보기 메뉴에서 '숨긴 항목' 체크해야 .git 폴더 보임)
$ git add
- 다음 커밋에 해당 파일을 추가하라는 뜻.
- 1) untracked이던 파일을 track 시작하고 싶을 때
- 2) tracked이던 modified 된 파일을 staging area에 올리고 싶을 때
- 3) merge할 때 충돌 난 애를 resolve 상태로 만들 때도 사용
$ git status -s
$ git status --short
- 상태를 간단하게 보여줌
- 파일명 앞 문자들 의미
1) M : Modified. 수정한 파일.
(공백)M : Modified && !Staged
M(공백) : Modified && Staged
MM : Modified && !Staged + Modified&&Staged.
2) A : Added. staging area에 add한 파일.
3) ?? : 추적하지 않는 파일. Untracked인 애들.
$ git diff
- 어떤 내용이 변경됐는지 확인.
- Unstaged 상태인 애들만 보여줌. ==> staging area에 올라간 애들은 볼 수 없음
$ git diff --staged
$ git diff --cached
- staging area에 올라간 애들의 변경된 부분을 보고 싶을 때 사용
$ git commit
- staging area에 있던 애를 커밋
$ git commit -m "여기에 커밋 메시지를 입력합니다."
- 커밋메시지 작성해서 커밋
$ git commit -v
- 편집기에 diff 메시지 추가해서 커밋 <==???
$ git commit -a -m '여기에 커밋메시지를 입력합니다.'
- add와 commit을 한 방에!
$ git push --force
- 강제 푸시
$ git tag <tagname>
- 태그 추가
$ git tag
- 태그목록 확인
$ git log --decorate
- 태그 정보를 포함한 이력 확인
$ git tag -a <tagname>
- 주석달린 태그 추가 (주석내용은 저 명령어 직후 입력받음)
$ git tag -am "주석내용" <tagname>
- 주석달린 태그 추가 (주석내용까지 한 방에)
$ git tag -n
- 태그 목록 / 주석내용 확인
$ git reset --hard HEAD~1
- 현재부터 1개의 커밋을 되돌아가라
- reset 후 강제 푸쉬 (git push --force) 해줘야함
- HEAD : 현재 커밋 / HEAD~# : 현재 커밋으로부터 #번째 전 커밋
- 옵션 : hard, soft, mixed
1) --soft: commit을 취소하고 해당 파일들은 staged 상태로 워킹 디렉터리에 보존
2) --mixed: 디폴트 옵션. commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에 보존
3) --hard: commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에서 삭제
$ git stash
- 하고 있던 작업을 임시 작업공간에 저장
$ git stash list
- stash 한 리스트 불러오기
$ git stash pop
- 마지막으로 stash한 작업 불러오기
$ git stash apply stash@{3}
- 특정 stash 불러오기
- stash@{#} : 가장 최근 stash 한 것이 stash@{0}이고 그 이전 것들은 1,2,3, ,,, 이렇게 숫자 매겨짐
리모트 브랜치 삭제
1) 삭제하고자 하는 브랜치 외의 다른 브랜치로 checkout
$ git checkout dev
2) 로컬에서 브랜치 삭제
$ git branch -d test
3) 원격저장소로 push 해서 리모트 브랜치도 삭제
$ git push origin :test
충돌날 때
<<<<< HEAD
현재 체크아웃된 파일의 코드 (내꺼 지금 파일)
============
병합하려는 브랜치의 코드 (깃에 이미 올라가 있는 파일)
>>>>>>>
위에꺼가 지금 내 파일!!
아래꺼가 이전 파일!!! (깃에 이미 올라가있던 파일!!)
'Programming > Git' 카테고리의 다른 글
[Git] CRLF, .gitattributes, 새로운 branch 가져오기, 원격 branch 삭제 (0) | 2020.06.05 |
---|---|
[Git] Please commit your changes or stash them before you merge. 해결방법 (0) | 2020.04.18 |
[Git] gitignore가 제대로 적용되지 않을 때 + rm 옵션 (0) | 2020.04.18 |
[Git] 로컬 폴더를 원격 저장소와 연결하기 (0) | 2020.03.04 |
[Git] 깃허브 마크다운 문법 (0) | 2020.01.24 |
[Github] 소스트리(SourceTree)로 깃허브 사용하기 (2) | 2020.01.04 |