어느정도 Git을 사용할 수 있지만, 최근에 시작한 프로젝트에서 git flow 전략을 사용하기위해 간략하게 git 기초를 정리하고자 한다.
Git은 분산 버전 관리 시스템으로, 소프트웨어 개발에서 파일의 변경 내역을 관리하고 협업을 쉽게 할 수 있도록 도와준다. Git의 주요 개념과 기본 사용법을 알아보자.
주요 개념
1. 저장소(Repository)
- 모든 파일과 그 파일의 변경 이력을 저장하는 곳
- 로컬저장소(자신의 컴퓨터)와 원격 저장소(서버에 저장)가 있음
2. 커밋Commit)
- 파일의 변경 사항의 하나의 단위로 묶어 기록하는 것
- 각 커밋에는 고유한 식별자(SHA-1 해시)가 부여, 누가 언제 어떤 변경을 했는지에 대한 정보가 포함됨
3. 브랜지(Branch)
- 여러 개의 독립적인 작업 흐름을 관리할 수 있게 해줌
- 기본적으로 main, master 브랜치가 있고, 새로운 기능을 개발하거나 버그를 수정할 때는 새로운 브랜치를 만들어 작업함
4. 머지(Merge)
- 한 브랜치에서의 변경 사항을 다른 브랜치에 반영하는 작업
- 머지 충돌이 발생할 수 있으며, 충돌을 해결해야 함
5. 풀(Pull)
- 원격 저장소의 변경 사항을 로컬 저장소에 가져오는 작업
6. 푸시(Push)
- 로컬 저장소의 변경 사항을 원격 저장소에 반영하는 작업
기본 명령어
Git 설정
# 사용자 이름 설정
git config --global user.name "사용자 이름"
# 사용자 이메일 설정
git config --global user.email "사용자 이메일"
각 커밋의 작성자를 명확히 해야하기 위해 이름과 이메일 설정은 필수이다.
저장소 초기화
# 현재 디렉토리를 새로운 Git 저장소로 초기화
git init
# GitHub에 있는 저장소를 복제
git clone https://github.com/사용자명/저장소명.git
- init은 현재 디렉토리에 git 저장소를 초기화 한다. 버전 관리를 시작할 수 있다.
- clone은 원격 저장소를 복제하여 로컬 컴퓨터에 복사한다.
파일 상태 확인
# 현재 작업 디렉토리의 상태를 확인 (변경, 스테이징된 파일)
git status
- 현재 작업 디렉토리의 변경된 파일, 스테이징이 된 파일, 스테이징이 되지 않은 파일의 상태를 확인 할 수 있다.
파일 추가 및 커밋
# 파일을 스테이지에 추가
git add <파일명> # 특정 파일 추가
git add . # 모든 변경 사항 추가
# 커밋(변경 사항을 저장소에 기록)
git commit -m "커밋 메세지"
브랜치
# 현재 브랜치 확인
git branch
# 새로운 브랜치 생성
git branch <브랜치명>
# 브랜치 변경
git checkout <브랜치명>
# 브랜치 생성과 동시에 변경
git checkout -b <브랜치명>
원격 저장소
# 원격 저장소 추가
git remote add origin <저장소 URL>
# 원격 저장소 목록 확인
git remote -v
# 원격 저장소에서 최신 변경 사항 가져오기(병합하지 않음)
git fetch origin <브랜치명>
# 원격 저장소에서 최신 변경 사항 가져오기(병합)
git pull origin <브랜치명>
# 변경 사항을 원격 저장소에 푸시
git push origin <브랜치명>
- git fetch origin은 최신 변경 사항을 가져오는데, 병합되지 않는다. 대신 FETCH_HEAD 레퍼런스가 생성되는데, 이를 통해최신 변경사항을 가져올 수 있으며 최신 상태와 현재 로컬 상태의 차이를 비교할 수 있다.
# 원격 저장소에서 최신 변경 사항을 가져옴
git fetch origin
# FETCH_HEAD와 현재 로컬 HEAD 사이의 차이를 비교함
git diff FETCH_HEAD
# 특정 파일만 비교
git diff FETCH_HEAD -- <파일명>
- git push를 시도했을 떄 충돌이 발생하면, 충돌을 해결한 후 다시 푸시해야 함
- git merge origin/<브랜치명>으로 원격 저장소와 merge한 후 푸시 해야함
병합
# 현재 브랜치에 다른 브랜치의 변경 사항 병합
git merge <브랜치명>
로그
# 커밋 로그 확인
git log
기타 명령어
# 수정한 파일의 변경 내용 보기
git diff
# 마지막 커밋 수정 (스테이지된 파일 포함)
git commit --aned
# 원격 브랜치 목록 보기
git branch -r
# 브랜치 삭제
git branch -d <브랜치명>
- git commit --amend는
- 이전 커밋 메시지를 변경하거나,스테이징된 변경사항을 이전 커밋에 추가 할 수 있다.
# 커밋메세지 수정, 해시 번호는 변경됨
git commit --amend -m "새로운 커밋 메세지"
# 파일 수정 및 스테이징
git add <파일명>
# 이전 커밋에 수정된 파일 추가
git commit --amend
- 이미 원격 저장소에 푸시된 커밋보다는 로컬에서만 존재하는 커밋에 사용하는 것이 좋다.
- 또는 커밋을 하고 푸시하기 전에 변경사항이 있으면 사용하기 좋을듯 하다.