Git & Github
Git, Github
Git이란 개발자의 코드를 효율적으로 관리하기 위해서 개발된 ‘분산형 버전 관리 시스템’으로 변경사항 및 버전을 추적하기 용이한 시스템이다.
Github란 Git Repository를 관리할 수 있는 클라우드 기반 서비스이다.
-
Repository
Git 명령어
위와 같이 Git과 Repository를 통해 효율적으로 코드를 관리하고 공유할 수 있다. 이에 혼자 작업 할 때, 함께 작업할 때, 브랜치 작업 예시는 다음과 같다.
혼자 작업 workflow
1) Fork : Remote에 있는 다른 Repository에서 Remote에 있는 내 Repository에 가지고 온다.
2) Clone : Fork한 코드를 수정하기 위해 내 컴퓨터로 가져온다.
git clone <Repository URL>
3) Add : 내 컴퓨터에서 작업한 파일을 git 관리하에 있는 상태인 Staging Area에 올려줄 수 있다.
git add .
git add <changed file name>
- 이때 Staging Area의 상태 및 추적되지 않은 파일(Untracked File)은 “git status” 명령어로 확인 가능하다.
- 또한, 이 단계까지(commit 전)는 “git restore [file name]” 명령어로 변경 사항을 돌릴 수 있다.
4) Commit : stagin area에 들어온 파일을 내 remote repository에 push하기 위해 commit 과정을 거친다.
git commit -m "commit msg"
- 현재까지 커밋된 내역들을 “git log”를 통해 확인할 수 있다.
- commit을 취소하고 싶다면 “git reset”으로 취소할 수 있다.
5) Push : 커밋한 파일을 자신의 Repository에 기록한다.
git push origin <branch name>
내가 작업한 코드를 함께 작업
1) Init : 내가 local에서 작업한 directory를 git 관리하에 넣는다.
git init
2) Remote Add : 작업한 Local Repository를 github에서 원격으로 관리하기 위해 Local Repository와 Remote Repository를 연결한다.(이 때, 내 작업 폴더는 깨끗해야 한다.(“git status” 확인))
git remote add origin(short name) <Repository URL>
- 이 때, Repository URL에 같이 작업하는 사람의 Repository URL을 넣는다면 나의 Local Repository와 상대방의 Repository와 연결할 수 있다.
- 또한, 이렇게 연결된 목록은 “git remote -v”를 통해 확인할 수 있다.
3) Pull : Remote Repository의 작업 내용을 가져온다.
git pull <short name> <branch>
- 작업 내용을 받아오면 받아오는 내용은 자동으로 병합(merge)된다.
- 이 때, 동일한 라인을 수정한 파일이 존재한다면 병합되지 않고, 충돌이 발생하는데, 이는 “git status”에서 확인이 가능하다.
- 또한, 충돌한 부분을 해결하려면
- Accept Current Change : 내가 수정한 내용으로 파일에 반영
- Accept Incoming Change : Remote Repository의 내용으로 파일에 반영
- Accept Both Changes : 변경 사항 모두를 반영
- 혹은 직접 수정
- 으로 선택해서 해결이 가능하다.
- 수정을 마치면, 병합 커밋을 생성해주기 위해 파일을 staging area로 올리고 commit(자동 커밋 메시지 생성), push가 가능하다.
- 또한, 충돌한 부분을 해결하려면
브랜치
브랜치는 독립적으로 어떤 작업을 진행하기 위한 개념이다.
이를 활용하여
- 한 소스코드에서 동시에 다양한 작업
- 소스코드의 한 시점과 동일한 상태를 만들고, 브랜치를 넘나들며 작업을 수행
- 각각의 브랜치에서 생긴 변화가 다른 브랜치에 영향을 주지 않고 독립적으로 코딩
이 가능하다.
브랜치 종류
- 통합 브랜치(Integration Branch)
- 배포될 소스 코드가 기록되는 브랜치
- main, master
- 해당 프로젝트의 모든 기능이 정상적으로 작동하는 상태의 소스코드
- 피처 브랜치(Feature Branch)
- 기능 추가, 버그 수정과 같이 단위 작업을 한 브랜치
- 토픽 브랜치라고도 함
브랜치 명령어
- 새로운 브랜치 생성
- git branch [branch name]
- 새로운 브랜치 생성 후 해당 브랜치로 전환(둘 중 하나)
- git switch -c [branch name]
- git checkout -b [branch name]
- 브랜치 목록 확인
- git branch
- 브랜치 목록과 각 브랜치의 최근 커밋 확인
- git branch -v
- 브랜치 삭제
- git branch -d [branch name]
- git branch -D : 병합하지 않은 브랜치 강제 삭제
- 브랜치 병합
- master <- dev
- git checkout master : master 브랜치로 이동
- git merge dev : master에서 dev 병합
- merge vs rebase
- merge : 변경 내용의 이력이 모두 그대로 남아 있다.
- rebase : 머지처럼 브랜치 통합을 목적으로 하지만, 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능을 한다.
- master <- dev
- 로그에 모든 브랜치를 그래프로 표현
- git log –branches –graph –decorate
- 아직 commit 하지 않은 작업을 스택에 임시로 저장
- git stash
본 포스팅은 코드스테이츠 BEB 과정을 수강하며 작성한 글입니다.