엘리스 AI

[1주차] Git 기초

욘아리 2023. 3. 7. 21:40

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 원격 저장소

  1. 원본 저장소를 Fork
  2. working directory로 clone
  3. 코드 수정 후 commit
  4. 원본 저장소가 아닌 fork한 저장소에 push
  5. 원본 저장소에 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 옵션을 사용하면 지정한 저장소의 이름과 주소를 함께 볼 수 있음
  1. 브랜치이지만 checkout 할 수 없음
  2. 가리키고 있는 commit의 위치를 강제로 변경할 수 없음
  3. 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