Git
Git은 리눅스의 창시자 리누스 토르발스가 만든 오픈 소스 분산 VCS다. 이를 이용해 상업 서비스로 등장한 것이 Github다.
Status
Working Tree - Stage Area - Repository
- Working Tree: 현재 작업 중이거나 수정이 발생한 파일, 사항을 의미하는 작업 영역
- Staging Area: git add를 통해 버전 관리 대상이 된 파일 및 디렉토리 등을 의미
- Repository: 버전 관리된 대상(저장소)
기본 용어
- commit: 파일을 추가하거나 변경 내용을 저장소에 저장하는 작업
- push: 파일을 추가하거나 변경 내용을 원격 저장소에 업로드 하는 작업
기본적인 명령어
git init
프로젝트 폴더에 .git 폴더를 생성, 초기화 한다. 이 폴더를 기준으로 깃의 관리를 받게 되는 것이다.
git config user.**
유저 정보를 설정한다.
git config user.name "username"
git config user.email "user@email.com"
git remote
URL이 가리키는 git repository를 원격 저장소로 지정 및 연결하면서, 그 이름을 origin으로 한다.
# git remote add origin 리포지토리-경로.git
git remote add origin https://github.com/뭐시기~.git
git status
git 관리 하에 있는 폴더 안에서 변화가 있는 파일과 폴더를 알려준다.
git add 파일명.확장자명
서버에 올리기 전에 변경점이 있는 파일을 stage에 올린다.
git add .
# 해당 디렉토리 내 변경된 모든 파일 추가
git add .
git commit
서버에 올리기 위해 commit 하기
# 메시지와 함께 commit
git commit -m "message..."
# 트래킹 중인 대상을 한번에 add하고 commit하기
git commit -am "message..."
# 커밋 메시지 수정
git commit --amend
git log
지금까지 한 commit들의 log를 볼 수 있다.
git diff
이전 commit과 비교하여 달라진 점을 보여준다.
git push 저장소명 브랜치명
commit한 내용을 서버로 보낸다.
# 기본
git push
# 브랜치 push
git push origin 브랜치명
# -u는 --set-upstream 옵션과 동일(이후에 git push 하면 자동으로 main 브랜치로 push 한다)
git push -u origin main
git pull
서버의 내용을 로컬에 내려 받는다.
git grep
저장소의 파일 내용을 검색할 때 사용한다. 특정 단어가 포함된 파일을 검색하고, 해당 파일의 어느 곳에 그 단어가 포함되어 있는지 확인할 수 있다.
git grep "검색 단어"
commit 취소
git revert
commit을 되돌린다. 현재에 있으면서 과거의 특정 commit들만 없던 일로 만든다. commit 내역이 남게 되는 것이다. 중간에 어떤 문제가 있었는지 기록이 남기 때문에, 협업 프로젝트의 경우 reset보다 revert를 사용하는 것이 좋다.
# 커밋ID3을 되돌려 커밋ID2가 되도록 함
git revert 커밋ID3
git reset
이 역시 commit을 되돌리는데, 시간을 과거의 특정 commit으로 되돌린다. commit을 되돌린다는 점에서 git revert와 공통점이 있지만, 차이점은 과거로 되돌리겠다는 내용도 기록되는지(commit 이력에 남는지)의 여부다. git reset은 현재가 없었던 것처럼 과거로 돌아가기 때문에 reset이란 이름처럼 이력을 남기지 않는다. 때문에 commit 히스토리를 깔끔하게 유지할 수 있고, 혼자 작업할 때 편하게 되돌아 갈 수 있다. 그러나 협업 프로젝트인 경우, 타인과 같은 브랜치에서 함께 작업할 때 commit이 뒤섞여버릴 수 있다.
# 돌아가려는 이력 이후의 모든 내용을 지워버림
git reset --hard 커밋ID
# 돌아가려 했던 이력으로 되돌아갔지만, 이후의 내용이 지워지지 않고,
# 해당 내용의 인덱스 또는 스테이지도 그대로 있음
git reset --soft 커밋ID
# 이력은 되돌려지고 이후에 변경된 내용은 남아있지만 인덱스는 초기화 됨
git reset --mixed 커밋ID
# 현재부터 6개 이전 이력으로 돌아가기
git reset HEAD~6
# 가장 최근 커밋 취소
git reset HEAD^
branch와 merge
실제 개발 현장에서는 새로운 기능을 위한 브랜치를 만들고 테스트가 완료되면 main (master) 브랜치에 통합을 하면서 개발이 진행된다. 이 브랜치의 통합 작업을 merge (병합)라고 한다.
브랜치의 생성과 이동
# 현재 브랜치 목록 확인
git branch
# branch001이라는 이름의 브랜치 생성
git branch branch001
# branch001이라는 이름의 브랜치를 생성하고 바로 이동
git checkout -b branch001
브랜치에 push
# 작성한 new.html 파일을 git에 추가하여 커밋
git add new.html
git commit -m "add file new.html"
# 원격 저장소로 push
git push origin branch001
브랜치에서 pull
다른 사람이 branch001 저장소로 개발하려면 해당 브랜치를 pull 받으면 된다.
# branch001로 이동하여 pull
git checkout branch001
git pull
브랜치 merge (병합)
# 브랜치에서 main으로 분기를 전환
git checkout main
# branch001이라는 이름의 브랜치를 병합
git merge branch001
# branch001 지점에서 생긴 변화가 확인되면 push
git push origin main
# 브랜치 branch001의 내용이 main으로 병합 완료
브랜치 삭제
git branch -d branch001
기타
.gitignore
깃에 올리지 않을 폴더나 파일 들을 기록하는 숨김 파일이다. 아래 링크된 사이트에서 개발 환경과 언어 등을 입력하여 쉽게 만들 수 있다.
https://www.toptal.com/developers/gitignore
gitignore.io
Create useful .gitignore files for your project
www.toptal.com
'웹_프론트엔드 > 로드맵 챌린지' 카테고리의 다른 글
웹 보안 지식 - HTTPS (0) | 2022.01.11 |
---|---|
VCS - GitHub (깃허브) (0) | 2022.01.10 |
VCS - 버전 관리(Version Control Systems)를 쓰는 이유 (0) | 2022.01.07 |
JavaScript - 호이스팅, 이벤트 버블링, 스코프, 프로토타입, Shadow Dom, strict mode (0) | 2022.01.06 |
JavaScript - 모듈러 자바스크립트와 ES6+ (0) | 2022.01.05 |