Git 파헤치기

kim_unknown_·2022년 4월 7일
0

TIL

목록 보기
3/27
post-thumbnail

1. Git을 사용하는 이유

• 효율적인 협업이 가능해진다.
버전 관리가 쉬워진다.


2. Git의 특징

• 가지치기와 병합이 가능하다.
• 대부분의 작업이 로컬에서 진행되기 때문에 가볍고 빠르다.
• 여러 사람이 동시에 분산 작업이 가능하다.
• 프로젝트의 무결성을 보장할 수 있다.
• 수정한 내용을 반영하기 전 검토하는 과정인 준비 영역이 있다.
오픈 소스이다.


3. Git 초기 설정

cmd창에서 git 혹은 git --version을 입력하여 설치 유무를 확인할 수 있다.

git config --global user.name "abc"
git config --global user.email "abc@abc.com"

* 프로젝트 마다 사용자 정보를 다르게 지정하고 싶다면 --global 옵션을 빼면 된다.

git config user.name "abc"
git config user.email abc@abc.com

설정 정보를 확인하려면 git config --list


4. Git Repository

git init 명령어를 입력하면 기존 디렉터리를 git repository로 설정할 수 있다.
git 저장소를 만들면 .git 이라는 디렉토리(폴더)가 새로 생성된다.

특정 이름으로 git 저장소를 만들고 싶다면 git init <이름> 명령어를 실행하면 된다.
* 특정 폴더로 이동하려면 cd 폴더명

Git은 3가지 영역으로 구분된다.
작업 영역(working directory) - 준비 영역(staging area) - git 저장소(repository)

① Git 파일 생성
-git add: 파일을 준비 영역으로 보내기
-git add .: 한 번에 여러가지 파일을 준비 영역으로 보내기

② Git 저장소 반영
-git commit: 준비 영역에 있는 파일을 git 저장소에 저장
git에 저장할 때는 파일의 어느 부분을 수정했는지 메시지를 남겨야 한다.
-git commit -m <커밋 메세지>: -m 뒤에 커밋 메시지 작성
-git commit --amend: 저장소 반영 내용 변경
-git commit --amend -m <커밋 메세지>: 커밋 메시지도 함께 변경

③ Git 관리 상태 확인
-git status: 준비 영역의 파일 상태 확인
-git log: 깃 저장소 반영 내역 확인
-git diff: commit된 파일들 중에서 변경된 사항을 비교
-git reset: 준비 영역에 올라가 있는 파일들을 Untracked 상태로 내림

git status 했을 때 상태 의미
Changes to be committed: -> 준비 영역에 있다는 의미
Changes not staged for commit: -> 파일 수정이 되었지만 준비 영역에 보내지진 않았다는 의미
Untracked files: -> 준비 영역에 없다는 의미

Git의 LifeCycle
Git의 관리대상인지 아닌지에 따라 Tracked / Untracked로 나뉨
Tracked: Git의 관리대상
Untracked: Git의 관리대상이 아님
Unmodified: 수정되지 않음
Modified: 수정됨
Staged: 커밋 직전, 준비 영역에 위치

git log 옵션 🔗log 명령어 정리

  • -p, --patch: diff와 같은 역할로, commit의 수정 결과를 보여준다.
  • -n: 보여줄 commit의 개수를 지정. 상위 n개의 commit만 보여준다.
  • --stat: commit의 통계 정보 조회. 어떤 파일이 수정됐는지, 파일이 얼마나 변경됐는지, 라인을 얼마나 추가하거나 삭제했는지 보여준다.
  • --pretty: 원하는 포맷으로 히스토리 조회. --pretty=oneline 하면 commit을 한 줄로 출력
  • --graph: commit간의 연결된 관계를 아스키 그래프로 출력
  • git log -S <텍스트>: 변경된 코드 중 특정 텍스트가 포함되어 있는지 검사
git log --oneline
git log --pretty=oneline
git log --graph

5. Git Branch

Git Branch는 각각의 Branch들이 서로 영향을 받지 않으며 독립적으로 작업을 진행하기 위한 것

  • 메인 Branch : 배포 가능한 수준의 안정적인 Branch
  • 토픽 Branch : 단위 작업을 위한 Branch (기능 수정, 추가...)

git branch <branch명>: Branch 생성
git branch: 현재 Branch 확인
git checkout <branch명>: Branch 전환 | snapshot을 넘나들기
git merge <branch명>: Branch 병합
git branch --merged: 병합된 Branch 확인
git branch -d <branch명>: 사용을 마친 Branch 삭제

* A 브랜치를 B 브랜치로 Merge할 때 (A => B)

git checkout B  <!--B Branch로 전환-->
git merge A     <!--A Branch를 Merge-->

Merge conflict : 두 Branch에서 같은 파일을 수정하고 병합 하면 충돌이 발생

Merge conflict 해결 방법

  • git status 명령어로 충돌이 발생한 파일 확인한다.
  • 해당 파일을 열어 수정하고, 특수 기호들은 지워준다. ex) <<<<<<, ======
  • 충돌이 해결되고 난 후에는 다시 git add git commit 과정을 거쳐 Merge한다.

6. 원격 저장소

원격 저장소 - 인터넷이나 네트워크 어딘가에 있는 저장소
ex) GitHub, GitLab

git clone [저장소 주소]: 원격 저장소 받아오기(=복사)
git remote add [저장소 단축이름] [저장소 주소]: 원격 저장소 추가
git remote rename [기존 이름] [새 이름]: 원격 저장소 이름 변경
git remote rm [저장소 이름]: 원격 저장소 삭제
git remote: 저장한 저장소 내역 확인
git remote -v: 저장한 저장소의 이름과 주소 확인
git pull [저장소명] [브랜치명]: 원격 저장소에서 데이터 가져오면서 자동 병합
git fetch [저장소명] [브랜치명]: 원격 저장소에서 데이터를 가져오기만 함. 병합은 별도로 진행
git merge [저장소명]/[브랜치명]: fetch 후 병합
git push [저장소명] [브랜치명]: 작업한 내용을 원격 저장소에 반영

<!--git pull,
자동 병합되기 때문에 별도의 병합 과정이 필요없음-->
git pull origin master

<!--git fetch,
병합을 별도로 진행해야함-->
git fetch origin master
git merge origin/master

<!--원격 저장소 만들고 로컬저장소의 내용을 push로 동기화-->
git remote add origin (저장소 url)
git push origin master

* 원격저장소의 단축 이름 default 값은 origin이다. 때문에 clone으로 복사해 온 저장소의 이름은 origin으로 통일된다.


참고자료
🐰 엘리스 SW 엔지니어 트랙 2기 Git 수업
🔗 Git 입문
🔗 Git 명령어

0개의 댓글