인프런 "모든 개발자의 실무를 위한 필수 기본기 클래스" 강의를 듣고 정리한 내용입니다.
Git
Git은 분산 버전 관리 도구로, 작업 내역을 저장할 수 있고 여러 사람들과 협업할 때 필수적으로 사용된다.
📁 Git의 4가지 작업 공간
Workspace
- git을 쓰기 이전 처음 상태로, 우리가 작업하는 일반적인 공간이며, git add 명령어 이전 변경 사항들이 기록된다.
Index
- 변경되는 모든 파일/폴더 추적하는 공간으로, git add 명령어로 workspace에 있는 작업을 이 공간으로 보낼 수 있다.
- 이 공간을 Staging Area 라고도 하며, 최종 커밋하고자 하는 작업물을 이 공간으로 둔다.
- 한 번 index에 올라간 파일들은 git에서 계속해서 추적한다.
Local Repository
- 최종 커밋 작업물이 놓이는 공간으로, git commit 명령어로 index에 있는 파일들을 이 공간으로 보낼 수 있다.
Remote Repository
- Git 호스팅 공간으로, 인터넷으로 연결된 별도의 공간이다. 최종 작업물을 저장하고 다른 사람들과 공유하여, 여러 사람이 함께 협업 시 이 공간을 사용한다.
- git push 명령어로 local repository 공간에 있는 작업물을 이 공간으로 보낼 수 있고, git fetch 나 git pull 명령어로 이 공간에 있는 작업물을 local repository로 가져올 수 있다.
- 대표적으로 GitHub, BitBucket, GitLab이 있다.
기본 동작 흐름 및 명령어
일반적인 작업 흐름은 다음과 같다.
workspace → index → local repository → remote repository
💻 기본적인 Git 명령어
- git 초기화
$ git init
- git 상태 확인
$ git status
- 파일을 index 공간에 두어 파일 내용과 변경 히스토리를 추적하는 명령어
$ git add {파일}
- 파일을 최종 커밋하여 index 공간에 있는 작업물을 local repository 공간으로 이동시키는 명령어. -m 옵션 뒤에 커밋 메시지를 입력한다.
$ git commit -m "파일 추가"
- local repository에 기록된 커밋 로그들을 확인하는 명령어
$ git log
- git remote repository를 등록하는 명령어
$ git remote add origin {git remote address}
# main 브랜치로 변경. -M 옵션 사용하면 기존에 동일한 이름의 branch가 있더라도 덮어쓴다.
$ git branch -M main
# git push -u 옵션을 붙이면 앞으로, main 이라는 현재 브랜치를 자동으로 origin 이라는 원격저장소의 main 브랜치로 연결해, 간단히 git push 만 입력하여 반영하거나 git pull 을 입력할 때 origin이라는 원격저장소의 main 브랜치를 로컬 저장소의 main 브랜치로 merge 할수 있게 해주겠다는 의미이다.
$ git push -u origin main
- remote repository로부터 작업 디렉터리를 받아와, remote repository main 브랜치 작업 내역 받아오는 명령어
$ git clone {git remote address}
$ git pull origin main
작업 공간 정리
git add : workspace → index
git commit : index → local repository
git push : local repository → remote repository
git pull, fetch : origin repository → remote repository
브랜치
브랜치는 사용자가 독립적으로 작업을 진행할 수 있도록 돕는 작업 흐름이다.
브랜치 위에서 새로운 브랜치를 생성해 독립된 작업 공간을 만들 수 있다. 그렇기 때문에 브랜치를 이용하여 하나의 프로젝트에서 여러 사람이 동시에 독립적인 본인의 작업을 진행할 수 있다.
🎈 브랜치를 이용한 작업 흐름
브랜치를 이용한 작업의 흐름은 다음과 같이 이루어진다.
- 메인 브랜치에서 자신이 작업할 새로운 브랜치를 생성한다.
- 본인이 만든 브랜치 위에서 작업한다.
- git 호스팅 서버를 사용하지 않는 경우
- 작업 완료 후 main 브랜치에 merge 한다.
- local repository의 main 브랜치가 업데이트 되었으므로, remote repository에 git push 하여 최신 내용을 업데이트한다.
- git 호스팅 서버를 사용하는 경우
- 작업 완료 후 remote repository에 브랜치를 git push 한다.
- merge 하기 전에 remote repository에서 Reviewer를 지정하여 main 브랜치로 Pull Request를 보낸다.
- 협업하는 다른 개발자들에게 코드 리뷰를 받는다.
- 리뷰 및 approve가 완료된 이후 main 브랜치에 해당 브랜치를 merge 한다.
✨ 구체적인 흐름
실제 명령어를 사용하여 조금 더 구체적인 흐름을 이해해 보자 !
1. main 브랜치에서 새로운 브랜치 생성
$ git switch -c {새로운 브랜치}
# 이전 상황으로 돌아가고 싶다면 아래 명령어 사용
$ git switch -
2. 새로운 브랜치 위에서 일련의 작업을 완료하는 과정 중 git add와 git commit을 반복한다.
$ git add {파일} 혹은 {디렉토리}
$ git commit -m "작업 내역에 대한 내용..."
# 합치기 위해 먼저 main 브랜치로 이동한다.
$ git switch main
# 브랜치를 현재 브랜치(main)에 합친다.
$ git merge {브랜치}
$ git push origin main
4-1. 동료들의 코드 리뷰를 받기 위해 Pull Request를 받은 후 업로드하는 경우, 자신이 만든 브랜치 이름과 동일한 원격 브랜치에 git push 한다. 그렇게 하면, GitHub에 미리 만들어둔 remote repository의 새로운 브랜치가 생기고, 그 브랜치에 작업한 내용이 올라가게 된다.
$ git push origin {자신의 작업한 브랜치 이름}
4-2. GitHub에서 main 브랜치로의 PR을 생성함으로써 다른 개발자들에게 작업 내역을 공유하고, main 브랜치로의 merge 요청을 하게 된다.
4-3. 리뷰를 거쳐 PR이 승인되고, 작업 내역이 main 브랜치에 merge되면 작업은 끝이 난다. 작업 완료된 브랜치는 깔끔한 정리를 위해 보통 삭제해 준다.
'Devlog > Git' 카테고리의 다른 글
[Git] 좋은 Commit 메시지 작성하기 (0) | 2022.09.06 |
---|---|
[Git] 상황별 Git과 충돌(Conflict) 다루기 (0) | 2022.07.05 |