Git
Git이란?
git은 버전 관리 프로그램을 말한다.
git을 사용했을 때의 이점은 지난 과정을 확인 가능하고 이전 버전으로 돌아가기가 가능하다. 또한 협업시에 유용하다.
repository
프로젝트 디렉토리에서 작업을하고 깃을 사용하면 .git 디렉토리에 버전별 프로젝트들이 저장되게 된다.
.git 디렉토리를 repository라고 한다.
repository 만들기
git init으로 비어있는 레포지토리를 생성한다.
commit
프로젝트 디렉토리의 현재 모습을 하나의 버전으로 남기는 동작을 commit이라고 한다.
repository가 커밋이 저장되는 곳이다.
처음으로 commit하기 전에 사용자 이름과 이메일을 설정해야 한다.
git config uesr.name “이름”
git config user.email “이메일”
커밋을 할때는 메세지를 함께 작성해야 한다.
git commit -m “메세지”
add
커밋할 파일을 미리 지정한다.
깃의 작업영역
- working directory(working tree) 작업을 하는 프로젝트 디렉토리를 말한다.
- staging area(index)
git add를 한 파일들이 존재하는 영역이다.
커밋을 하면 staging area에 있는 파일들만 커밋에 반영된다.
커밋을 하더라도 staging area에 있던 것들은 상관없이 계속 남아있다. - repository
working directory의 변경 이력들이 저장되어 있는 영역이다.
즉, 커밋들이 저장되는 영역.
status
깃이 인식하고 있는 프로젝트 디렉토리의 현재 상태를 보여줌.
- Untracked 상태 파일이 깃에 의해서 변동사항이 추적되고 있지 않는 상태를 말한다.
- Tracked 상태
파일이 깃에 의해서 변동사항이 추적되고 있는 상태를 말한다.
- Staged 상태 파일이 수정되고 나서 staging area에 올라와 있는 상태를 말한다.
- Unmodified 상태 현재 파일의 내용이 최신 커밋의 모습과 비교했을 때 바뀐게 없는 상태를 말한다.
- Modified 상태 최신 커밋의 모습과 비교했을 때 조금이라도 바뀐 내용이 있는 상태를 말한다.
git reset
staging area에서 파일 제거
GitHub
깃 저장소 생성 후 기존 디렉토리 연결
git remote add origin 링크
git branch -M master
git push -u origin master
git remote add origin 링크
git remote add origin 링크 에서 remote는 리모트 레포지토리에 관한 작업을 할 때 쓰는 커맨드 이다.
add는 새로 등록을 하겠다는 뜻이다. 즉 링크의 리모트 레포지토리를 origin이라는 이름으로 등록하겠다는 말이다.
관습적으로 origin을 주로 쓴다.
git push -u origin master
git push -u origin master 는 로컬 레포지토리의 master브랜치의 내용을 origin이라는 리모트 레포지토리로 보낸다는 뜻이다.
이때 같은 이름의 브랜치로 전송을하고 같은 이름의 브랜치가 없으면 새로 생성하고 푸쉬한다.
여기서 -u옵션은 –set-upstream옵션의 약자인데 이 옵션을 주면 로컬 레포지토리에 있는 master브랜치가 origin에 있는 master브랜치를 tracking(추적)하는 걸로 설정된다. 이렇게 맺어진 연결 상태를 tracking connection이라 한다.
로컬 레포지토리의 A브랜치와 리모트 레포지토리의 B브랜치가 tracking connection돼면 B를 A의 upstream branch라고 한다.
이 관계가 맺어지면 git push / git pull 만 써도 작동을 하게 된다.
그렇지 않으면 git push origin master:master 이런식으로 작성해야 한다.
origin은 리모트 레포지토리고 앞의 master는 로컬 레포지토리의 master브랜치, 뒤의 master는 리모트 레포지토리의 master브랜치를 나타낸다.
Local Repository -> Remote Repository
로컬에서 커밋 후 리모트로 전송하기.
git push
git push -u origin master
로컬 레포지토리의 내용을 처음으로 리모트 레포지토리에 올릴 때 사용한다.
Remote Repository -> Local Repository
리모트가 더 최신일 때 로컬로 전송하기.
git pull
push 권한
자신의 리모트 레포지토리에는 자신만 push를 할 수 있다.
만약 다른 사용자도 push를 할 수 있게 하려면 그 사용자를 해당 리모트 레포지토리의 collaborator로 지정하면 된다.
다른 프로젝트 가져오기
git clone 주소
깃허브 프로젝트의 레포지토리를 그대로 복제한다.
commit 다루기
커밋 히스토리
git log
- git log –pretty=옵션
git log –pretty=oneline 로그를 한 줄로 보여준다. - git show 커밋아이디
커밋의 변경사항을 보여준다.
커밋 vi에서 작성
m옵션 없이 git commit으로만 실행하면 vi에서 메세지를 작성할 수 있다.
최신 커밋 수정하기
git commit –amend
새로운 커밋을 추가하는 게 아니라 기존의 최신 커밋을 수정한다.
커밋 가이드라인
커밋 메시지 작성
- 제목과 내용사이에는 한 줄 비우기.
- 제목 뒤에 점(.) 붙이지 않기.
- 제목의 첫 번째 알파벳은 대문자로.
- 제목은 명령조로 Fix-id(o) Fixed-it(x) Fiexes it(x)
- 내용에는 왜 커밋을 했는지, 어떤 문제가 있었는지, 적용한 해결책이 어떤 효과를 가지는지
커밋 생성
- 하나의 커밋에는 하나의 수정사항만 남긴다. 커밋을 작은단위로 자주하는게 좋다.
- 전체 코드를 실행했을 때 에러가 발생하지 않는 상태에만 커밋을 한다.
aliasing
커맨드에 별명을 사용할 수 있다.
git config alias.별명이름 ‘원하는 기능’
예시) git config alias.history ‘log –pretty=oneline’
커밋간의 차이 보기
git diff 커밋아이디 커밋아이디
HEAD
HEAD는 보통 가장 최근에 한 커밋을 가리킨다.
HEAD는 어떤 커밋 하나를 가리키고 HEAD가 가리키는 커밋에 따라 working directory가 구성된다.
HEAD옮기기
git reset –hard 커밋아이디
해당 커밋을 HEAD가 가리키게 할 수 있다.
working directory의 내용도 그 커밋의 모습으로 돌아간다.
git reset과의 차이
git reset은 과거 커밋으로 아예 돌아가고 싶을 때 사용.
git reset 옵션
git reset 옵션 a5 | working directory | staging area | repository |
---|---|---|---|
–soft | 안 바뀜 | 안 바뀜 | HEAD가 a5 커밋 가리킴 |
–mixed | 안 바뀜 | a5커밋처럼 바뀜 | HEAD가 a5 커밋 가리킴 |
–hard | a5커밋처럼 바뀜 | a5커밋처럼 바뀜 | HEAD가 a5 커밋 가리킴 |
soft나 mixed를 쓰는게 좋다.
hard는 커밋이후로 워킹 디렉토리에서 했던 내용들이 모두 사라진다.
soft를 사용했을때 staging area에 기존에 가장 최신 상태뿐만 아니라 다른 파일이 있는것은 커밋을 하더라도 staging area에 있던 것들은 상관없이 계속 남아있기 때문에 이전의 파일이 남아있는 것이다.
HEAD를 기준으로 reset
git reset 옵션 커밋아이디 에서 커밋 아이디를 일일이 작성하기 불편하다면 커밋아이디 자리를 이렇게 대체하면 된다.
git reset –hard HEAD^
HEAD^는 현재 가리키는 위치에서 바로 이전 커밋을 나타낸다.
git reset –hard HEAD~2
HEAD~숫자는 현재 가리키는 위치에서 해당 숫자만큼의 단계 전에 있는 커밋을 나타낸다.
커밋에 tag달기
git tag 태그이름 커밋아이디
그리고 이후에는 태그이름으로 사용하면 된다.
모든 태그 조회 - git tag
해당 태그 조회 - git show 태그이름
해당 태그 지우기 - git tag -d 태그이름
Leave a comment