[1주차] Git 기초
Git이란?
Git은 소프트웨어 개발에서 버전 관리를 위해 사용되는 분산 버전 관리 시스템입니다.
1. Git을 사용하는 이유
- 효율적인 협업 가능
- 쉬운 버전 관리
2. Git 특징
- 가지 치기와 병합 가능
- 오픈 소스
- 세 가지 영역 : 작업 영역(Working Directory) / 준비 영역(Staging area) / 저장소(Repository)
- 가볍고 빠름
- 데이터 보장
- 분산 작업 : 모든 작업자들이 각자 온전한 프로젝트 파일을 가지고 독립된 상태로 작업 가능
3. Git 설치와 초기 설정
- Git 설치 : https://git-scm.com/downloads
- Git 초기 설정 방법
- 사용자 정보 설정
$ git config --global user.name "username"
$ git config --global user.email "user@email.com"
프로젝트마다 다른 사용자 정보를 지정하고 싶으면 저장소 생성 후 - -global 빼고 실행
- 설정 정보 확인
$ git config --list
4. Git 저장소 생성
- Git init: 기존의 디렉토리를 git repository로 설정
📍Staging Area
- Working Directory : 내가 작업하고 있는 프로젝트의 디렉토리
- Staging Area : 커밋을 하기 위해 $ git add 명령어로 추가한 파일들이 모여있는 공간
- Repository : 커밋들이 모여있는 저장소
Git 시작하기
1. Git 파일 생성
새로운 파일 생성 - 준비영역으로 보내고 git add 명령어 사용 특정 파일을 추가하거나 파일이 많을 경우 현재 폴더를 대상으로 지정
$ git add file_name
$ git add .
- .은 경로를 나타낼 때 현재 working 디렉토리를 의미하기도 하며 git 명령어 뒤에 붙었을 때 경로 내에 있는 모든 파일을 의미하기도 합니다.
2. Git 저장소 반영
저장소 반영 - git 저장소 내에 staging 파일 저장, 무엇을 수정하고 추가했는지 메세지를 남겨 저장소에 저장
$ git commit
$ git commit -m "Initial commit"
$ git commit -am # add와 커밋이 동시에
💡 커밋 메시지 깔끔하게 작성하기
feat : 새로운 기능 추가
fix : 버그 수정
docs : 문서 수정 및 추가
style : 코드 스타일 관련 변경(코드 포매팅, 세미콜론 누락 등)
refactor : 코드 리팩토링
test : 테스트 코드, 리팩토링 테스트 코드 추가
chore : 빌드 task 수정, 패키지 매니저 수정 (.gitignore 수정 같은 경우)
저장소 반영 내용 변경
$ git commit --amend
3. Git 관리 상태 확인
파일 상태 확인
- git status : staging area의 파일들의 상태 확인
- git diff : commit 된 파일 중 변경된 사항을 비교할 때 사용
- git log : 저장소 반영 내역 확인
- -p, - -patch : 각 commit의 수정 결과를 보여주는 diff와 같은 역할을 수행
- -n : 상위 n개의 commit만 보여줌
- --stat : 어떤 파일이 commit에서 수정되고 변경되었는지, 파일 내 라인이 추가되거나 삭제되었는지 확인
- --pretty=oneline : 각 commit을 한 줄로 출력
- --graph : commit간의 연결된 관계를 그래프로 출력
- -S <function_name> : 코드에서 추가되거나 제거된 내용 중 특정 텍스트가 포함되어 있는지 검사
Git 가지 치기
Git Branch
브랜치 생성 및 확인
$ git branch <branch_name>
$ git branch
branch_name
* master
브랜치 전환
$ git checkout branch_name
$ git checkout -b branch_name # 생성 및 이동
$ git switch branch_name
- checkout은 브랜치를 전환하는데 사용할 수 도 있고 git log로 확인한 snapshot을 넘나들때도 사용 가능
fast-forward
merge가 이루어지는 것
Merge
$ git checkout master
$ git merge branch_name
- 현재 HEAD가 가리키고 있는 branch에 branch_name에서 했던 작업들을 병합
갈라지는 branch
$ git log --pretty=oneline --graph --all
* ~~~~ (HEAD->master) add master
ㅣ *~~~~ (branch_name) add barnch_name
ㅣ/
* ~~~~ init git
- commit graph 확인
$ git checkout master
$ git merge branch_name
git branch 삭제
$ git branch -d branch_name
conflict 해결
같은 파일을 변경했을 때 충돌이 발생
1. git status 명령어로 어느 파일에서 충돌이 발생했는지 확인
2. 충돌이 일어난 파일 열어보기
<<<<<<< HEAD
This is some content from the current branch.
=======
This is some cotent from another branch.
>>>>>>> another-branch
- <<<<<< HEAD와 ======= 사이에 있는 내용은 현재 브랜치에서 수정한 내용
- ======= 와 >>>>>>> another-branch 사이에 있는 내용은 다른 브랜치에서 수정한 내용
- another-branch는 병합하려는 브랜치의 이름
3. 충돌 부분을 최종적으로 남기고 싶은 부분들을 수정 후 add, commit 과정을 거쳐 다시 merge
git merge 충돌 방지
- master branch변화를 지속적으로 가져와서 충돌이 발생하는 부분을 제거
Git 원격 저장소
- 원본 저장소를 Fork
- working directory로 clone
- 코드 수정 후 commit
- 원본 저장소가 아닌 fork한 저장소에 push
- 원본 저장소에 Merge Request
원격 저장소 받아오기
clone을 이용해 원격 저장소의 코드를 로컬 저장소에 복사
$ git clone <http://gitlab.com/alwys/myproject.git>
원격 저장소 연결
$ git remote add origin <http://gitlab.com/group/project>
연결된 원격 저장소 확인 및 살펴보기
$ git remote
origin
$ git remote show origin
원격 저장소 이름 변경
$ git remote rename origin git_name
원격 저장소 삭제
$ git remote rm git_name
원격 저장소 동기화
- Pull : 원격 저장소에서 데이터 가져오기 + 로컬 데이터와 병합
- Fetch : 원격 저장소에서 데이터 가져오기, 진행중인 작업 마무리 후 병합해줘야 함
- Push : 로컬 저장소에서 원격 저장소에 반영
origin/master (트래킹 브랜치)
$ git remote add origin <http://gitlab.com/group/project>
- 원격저장소의 단축이름을 origin으로 지정한다는 의미입니다. (default)
$ git remote -v
origin <https://gitlab.com/group/project> (fecth)
origin <https://gitlab.com/group/project> (push)
- -v 옵션을 사용하면 지정한 저장소의 이름과 주소를 함께 볼 수 있음
- 브랜치이지만 checkout 할 수 없음
- 가리키고 있는 commit의 위치를 강제로 변경할 수 없음
- git merge origin/master로 merge 가능
🎮git tutorial game https://learngitbranching.js.org/?locale=ko
Learn Git Branching
An interactive Git visualization tool to educate and challenge!
learngitbranching.js.org