Git이란?
분산형 버전 관리 시스템의 한 종류로, 버전 관리를 할 수 있다는 장점이 있다.
그만큼, 현업에서 가장 자주 쓰는 협업 툴이라고 볼 수 있는데, 이번 시간에는 기본적인 깃허브 사용방법과 다양한 협업 합치기 방법을 정리해보려고 한다.
Git의 장점
- 각 파일을 이전 상태로 되돌릴 수 있다
- 프로젝트를 통째로 이전 상태로 되돌릴 수 있다
- 쓸 일 없을 거라고 생각했는데, 의외로 진짜 유용하다… (최근에 3번 되돌렸다,,ㅠ)
- 시간에 따라 수정 내용을 비교해 볼 수 있다
- 누가 문제를 일으켰는지 추적할 수 있다
- 누가 언제 만든 이슈인지 알 수 있다
결국, 다시 한 번 정리하자면
- 여러 명이 동시에 작업할 때 (병렬 개발)
- 인터넷이 연결되지 않은 환경에서 개발을 진행하고, 이를 저장할 때
- 중앙 저장소가 날라가서 원상 복구 하고 싶을 때
- 체계적인 개발을 하고 싶을 때
Git의 3가지 파일 상태
알아둬야 하는 용어 : 로컬 저장소 → 내 컴퓨터, 원격 저장소 → 깃허브
- Commited : 데이터가 로컬 저장소에 안전하게 저장됐을 때
- Modified : 수정한 파일을 아직 원격 저장소에 커밋하지 않았을 때
- Staged : 현재 수정한 파일을 이제 원격 저장소에 커밋하려고 할 때
결국, GitHub가 하는 일은…
- 워킹 트리에서 파일을 수정한다
- Staging Area (=장바구니)에 파일을 Stage (=담아서) 커밋할 스냅샷을 만든다
- 이때, 모든 파일을 추가할 수도 있고, 원하는 파일만 선택해서 추가할 수 있다.
- Staging Area에 있는 파일들을 Commit 해서 Git 디렉토리에 영구적인 스냅샷으로 저장한다.
⇒ 즉, 우리의 코드들의 모든 과정을 기록한다.
Step 0. Git 설치 및 세팅
설치는 완료했다고 가정하고,,,
내 컴퓨터에서 깃허브를 처음 쓰려면 세팅을 해줘야 하는데
- 아무 폴더를 만든다.
- 해당 폴더에서 ‘터미널’을 연다
- git --version 명령어로 설치된 버전을 확인한다 (안 뜨면 안 깔린 거니까 다시 설치하자)
- 내 정보 입력하기 (내 깃허브 계정과 연결하기)
- git config --global uesr.email "email@naver.com" → 내 깃허브 이메일 계정
- git config --global user.name "정지윤"
Step 1. 저장소 만들기
먼저 로컬 저장소 (=내 컴퓨터)와 원격 저장소를 연결 시켜줘야한다.
로컬 저장소에서는 오류 해결 등 모든 일련의 과정들을 수행하고, 이를 원격 저장소에 저장함으로써, 공유하고 기록하는 역할을 한다.
저장소 만드는 방법
- 아예 새로 만들기 : git init
- 이미 만들어진 원격 저장소에 로컬 저장소 연결하기 : git clone
이제 깃허브를 쓰는 과정에서 깃허브의 자주 쓰이는 명령어만 정리해보려고 한다.
Git 명령어 모음
제일 기본으로 알아둬야 하는 명령어들
- git init : 프로젝트 버전 관리 시작→ 프로젝트 단위로 Git 버전 관리를 시작하는 기능
- 프로젝트 폴더 처음 열고 터미널에 이 명령어를 치고 시작
- git remote -v : 원격 저장소 URL 확인
- 지금 내 프로젝트랑 연결된 원격 저장소 URL을 확인할 수 있다
- git remote add <원격별칭> <URL> : 원격 저장소 추가→ 원격 별칭을 원격 저장소를 지칭하는 이름, 단일 원격인 경우 origin 사용을 추천함
- ex) git remote add origin <https://github.com/lisrarnjs/test.git>
- git clone <URL> : 원격 저장소 복제
- ex) git clone <https://github.com/lisarnjs/test.git>
- git status : 현재 브랜치 변경사항 확인
- git add <파일명> : 특정 파일 추적 및 스테이징
- ex) git add ./src/main.js
- git add . : 모든 파일 추적 및 스테이징
- git restore --staged <파일> : 특정 파일 언스테이징 (v2.23)
- ex) git restore --staged ./src/main.js
- git restore --staged . : 특정 파일 언스테이징 (v2.23)
- git commit -m “message” : 버전 생성 (따옴표 닫기 전에는 메시지 줄 바꿈 가능)
- git commit > i > 메시지 입력 > esc > :wq : vim 에디터로 커밋 메시지 작성하기
→ commit 은 버전 생성으로, 현재 작업 내용을 하나의 버전으로 기록(생성)하는 것
버전 관리 할 때 쓰이는 명령어들
명령 설명 예시
| git log | 현재 브랜치의 버전 내역을 확인 | |
| git log -<숫자> | 숫자만큼만 최신 버전 내역 확인 | git log -2 |
| git log --all | 모든 브랜치 내역 확인 | |
| git log --oneline | 간략한 버전 내역 확인 | |
| git log --graph | 그래프 형태로 버전 내역 확인 | |
| git reflog | 로컬의 모든 버전 관리 내역 확인 | |
| git show | 현재 브랜치의 최신 버전 확인 | |
| git show <브랜치> | 특정 브랜치의 최신 버전 확인 | git show dev |
브랜치를 사용할 때 쓰이는 명령어들
명령 설명 예시
| git branch | 로컬 브랜치 목록 확인 | |
| git branch -r | 원격 브랜치 목록 확인 | |
| git branch -a | 로컬 및 원격 브랜치 목록 확인 | |
| git branch <브랜치> | 브랜치 생성 | git branch dev |
| git branch -D <브랜치> | 브랜치 삭제 | git branch -D dev |
| git branch -m <브랜치> | 현재 브랜치 이름 변경 | git branch -m main |
| git branch -m <이전브랜치> <새브랜치> | 특정 브랜치 이름 변경 | git branch -m master main |
| git branch --show-current | 현재 브랜치 이름 확인 (v2.22) | |
| git checkout <브랜치> | 브랜치 전환 | git checkout dev |
| git checkout -b <브랜치> | 브랜치 생성 및 전환 | git checkout -b dev |
| git checkout <해시> | 특정 버전 체크아웃 | git checkout 1a2b3c4d |
| git switch <브랜치> | 브랜치 전환 (v2.23) | git switch dev |
| git swtich -c <브랜치> | 브랜치 생성 및 전환 (v2.23) | git switch -c dev |
<aside> 💡
여기서 branch란?
프로젝트에서 여러 작업을 나눠서 병렬로 진행할 수 있는 버전 관리의 분기점을 의미한다.
예를 들어서 A와 B가 협업하고 있을 때, 각각 a와 b 브랜치에서 코딩을 하고 이를 나중에 하나로 합치는 거다
</aside>
git push와 관련된 명령어들
명령 설명 예시
| git push <원격별칭> <브랜치> | 원격 저장소로 밀어내기 | git push origin dev |
| git push <원격별칭> --all | 원격 저장소로 모든 브랜치 밀어내기 | git push origin --all |
| git push <원격별칭> <브랜치> -f | 원격 저장소로 강제(Force) 밀어내기 | git push origin dev -f |
<aside> 💡
push는 말 그대로 밀어내기, 즉 로컬 저장소에서 수정한 내용을 원격 저장소로 밀 때 쓴다
</aside>
git pull과 관련된 명령어들
명령 설명 예시
| git pull <원격별칭> <브랜치> | 원격 저장소에서 브랜치 당겨오기 | git pull origin dev |
| git pull --rebase <원격별칭> <브랜치> | 원격 저장소의 브랜치로 로컬 브랜치 덮어쓰기 | git pull --rebase origin dev |
<aside> 💡
pull은 당겨오기, 즉 원격 저장소에서 업데이트된 내용을 로컬 저장소에 불러올 때 쓴다
</aside>
git restore 과 관련된 명령어들
은근 많이 쓰인다.. 생각보다 되돌리기로 해결 안되는 오류들이 많다,, (그럴 땐 리—셋)
명령 설명 예시
| git checkout HEAD -- <파일> | 특정 파일 롤백 | git checkout HEAD -- ./src/main.js |
| git restore <파일> | 특정 파일 롤백 (v2.23) | git restore ./src/main.js |
| git restore . | 모든 파일 롤백 (v2.23) | |
| git reset --hard HEAD | 모든 파일 롤백 |
명령 설명 예시
| git reset --hard HEAD~<번호> | 번호만큼 이전 버전으로 리셋 | git reset --hard HEAD~2 |
| git reset --hard HEAD~1 | 직전 버전으로 리셋 (1 버전 전으로) | |
| git reset --hard HEAD~ | 직전 버전으로 리셋 (1 생략) | |
| git reset --hard <해시> | 특정 버전으로 리셋 | git reset --hard 1a2b3c4d |
| git reset --hard HEAD^ | 마지막 버전을 삭제 | |
| git reset --hard | 수정 내용을 버림 | |
| git reset --soft | 수정 내용을 스테이징 | |
| git reset --mixed | 수정 내용을 스테이징하지 않음 |
branch 관련 명령어들
명령 설명 예시
| git merge <브랜치> | 현재 브랜치에 특정 브랜치 병합 | git merge dev |
명령 설명 예시
| git rebase <브랜치> | 현재 브랜치를 대상 브랜치로 재배치 | git rebase main |
| git rebase --continue | 재배치 계속 진행 |
merge의 중요성
나는 주로 혼자서 프론트엔드를 맡아왔기 때문에 사실 충돌이 날만한 일이 없었다,,
근데 취직하고 나서는 “협업”이 일상이 될텐데, 나 혼자 독고다이로 코딩을 하면 진짜 큰일난다..
(무한 충돌 발생,,,)
그럴 때! 우리는 branch 와 merge를 쓰면 된다.
대부분의 협업 과정에서
- 웹사이트가 있고 작업을 진행한다.
- 새로운 이슈를 처리할 새 branch를 만든다.
- 새로 만든 branch에서 작업을 진행한다.
이때 중요한 문제가 생겨서 그것을 해결하는 Hotfix를 먼저 만들어야 한다. 그러면 아래와 같이 할 수 있다.
- 새로운 이슈를 처리하기 이전의 운영(Production) 브랜치로 이동한다.
- Hotfix 브랜치를 새로 하나 생성한다.
- 수정한 Hotfix 테스트를 마치고 운영 브랜치로 Merge 한다.
- 다시 작업하던 브랜치로 옮겨가서 하던 일 진행한다.
그러면 한 번 실습을 진행해보자!
Github에 git 명령어를 사용해서 코드 올리기
- github에 git-practice-repo 이름의 새로운 레포지토리를 생성한다.
- vscode에서 아까 만들었던 git-practice 폴더를 열어준다.
- github에 나와있는 순서대로 진행한다.
- 참고 : git push할 때 -u 추가하면 주소 기억하라는 뜻, 한 번 입력하면 그 뒤로 안 해도 됨
git branch 명령어 활용해서 새로운 branch를 만들고 깃허브에 올리기
- git-practice 프로젝트 열어서 terminal 열어줍니다
- git switch -c newbranch 명령어를 입력하여 새로운 브랜치 생성 및 전환합니다.
- 왼쪽 아래 브랜치 변경된 것 확인합니다.
- 새로운 브랜치에서 README.md 에 수정 사항 만들고 add, commit 합니다.
- 원격 저장소에 새로운 브랜치를 올립니다. git push origin newbranch
코드를 임시 저장하고 다음 commit push 하기
- newbranch에서 리드미에 주석(ctrl, command + /)으로 코드 작성하고 ctrl + s / command + s 로 저장하기
- 방금 저장한 것은 커밋으로 올라가면 안되는데..?! 코드를 임시 저장해보자 git stash
- 다시 뭔가 작성해보고 add, commit 하고 push 해보자.
- 원격 저장소에 주석 빼고 잘 올라갔는지 확인하고, 돌아와서 git stash pop 을 해보자.
- 그럼 충돌 난다. 해결해보자.
- 해결법결국 내가 최종적으로 남기고 싶은 부분으로 다시 수정해주고
- git add . → git commit -m “충돌 수정” → git push origin main
- 충돌이 났을 땐? 먼저 관련 내용을 다시 하나로 수정해주는 작업이 필요하다
다른 사람의 repo를 clone 하고 branch 새로 만들어서 push 하기
- test-repo의 저장소 URL을 복사한다.
- 터미널 열고 frontend 폴더를 찾아간다. (ls → cd Desktop → cd frontend → git clone URL)
- frontend 폴더에 test-repo 프로젝트가 만들어진다.
- 본인이름한글로 브랜치명 따셔서 브랜치 만들어주시고, README.md 파일 만들어서 커밋하고 해당 브랜치를 push 한다. try first
내 branch에서 testbranch 만들고 코드 merge 하기
- 본인이름한글로 브랜치에서 git switch -c testbranch 로 새로운 브랜치를 만들어준다.
- README.md 에 새로운 코드 작성하고 add → commit 한다.
- git switch 본인이름한글로 로 넘어와서 git merge testbranch 입력한다.
- testbranch에 있던 코드가 본인이름한글로로 잘 넘어온다.
- merge 완료되었다면 사용하지 않는 브랜치를 삭제한다. git branch -d testbranch
- test-repo의 본인이름한글로 브랜치로 push 한다. try-first
충돌 만들고, merge 해보기
- 다시 testbranch 만들어준다. git switch -c testbranch
- 다시 본인이름한글로 브랜치로 돌아온다.
- README.md 에 코드 한 줄 추가하고 add → commit 한다.
- testbranch 로 이동해서 README.md 에 있던 코드 다 지우고 “메롱”이라고 적는다.
- git add . → git commit -m “test branch commit 1” 해볼게요.
- 본인이름한글로 로 돌아와서 testbranch 를 merge 해보면 충돌 나는데,
- 직접 충돌 해결하고, add → commit 해준다.
- 이제 testbranch도 merge했으니 삭제한다.
'BoostCamp' 카테고리의 다른 글
| [250305] HTML (1) | 2025.03.05 |
|---|---|
| [250304] CI/CD (0) | 2025.03.04 |
| [250228] Git 전략과 협업 방법 (0) | 2025.02.28 |
