Moon Work

Git 기초 명령어 모음 본문

이해를 위한 기록들

Git 기초 명령어 모음

moonkey 2022. 11. 22. 16:10

Git 시작하기

git init

 

Staging area에 파일 추가하기

git add [파일 또는 폴더]

// 현재 디렉토리의 모든 내용을 staging area에 추가할 때
git add .

// 작업 디렉토리 내의 모든 변경 내용을 staging area에 추가할 때
git add -a

 

Commit하기

//staging area에 있는 모든 내용을 묶어서 하나의 commit을 생성한다.
git commit -m "message"

 

git 상태 확인하기

git status

 

branch 만들기

//branch 만들기
git branch [branchName]

//branch 만들고 branch로 이동하기
git checkout -b [branchName]

 

branch로 이동하기

git checkout [branchName]

 

branch 상대참조로 이동하기

commit의 해시값을 기억하는 것이 쉽지 않기 때문에 상대참조를 통해 이동할 수 있다.

  1. ^ 로 이동하기
    • 한번에 한 commit 위로 이동한다.
  2. HEAD~4
    • 한번에 여러 commit 위로 이동할 수 있다.
//main branch 부모로 이동하기
git checkout main^

//main의 4번 위에 commit으로 이동하기
git checkout Main~4

 

branch 옮기기

branch를 강제로 특정 commit으로 재지정 할 수 있다.

//예를 들어 bugFix라는 branch에서 아래와 같이 입력하면 main branch가 있는 commit으로 bugFix branch가 이동한다. 
git branch -f main

 

merge

  • git merge를 통해 branch를 병합할 수 있다.
  • 병합하기 원하는 방식에 따라 fast-forward, non-fast-forward 방식으로 나뉜다.

 

fast-forward

병합의 대상이 되는 branch가 병합의 주체가 되는 branch보다 앞에 있는 경우 주체가 되는 branch가 대상이 되는 branch의 commit으로 이동하는 방식이다.

//on main branch
//아래 코드를 실행할 경우 branchName으로 main branch가 이동하면서 merge 된다. 
git merge [branchName]

fast-forward

non-fast-forward

  • 앞에 fast-forward 방식와 다르게 병합을 원하는 branch의 복사버전을 만들어서 새로운 commit을 만들어서 합치는 방식이다.
git merge [branchName] --no-ff

non-fast-forward

 

merge 충돌이 발생하는 경우

  1. 기준이되는 branch와 병합하려는 branch의 commit 횟수가 같은 경우
  2. 기준이 되는 branch의 내용을 병합하려는 branch에서 변경한 경우

위에 두가지 경우에서는 merge를 하는 기준이 없게 되므로 아래와 같이 기준을 어떻게 해서 merge 할 것인지 결정하게 된다.

해결 방법

1번 에러의 경우는 변경한 내용을 찾아서 같게 만들어주어야 merge가 가능하다.

2번의 경우 아래 두가지 방법을 사용할 수 있다.

  1. git merge —squash [branchName]
    1. branchName의 브랜치들을 모두 합쳐서 하나의 commit으로 만든다음 staged에 둔다.
    2. commit을 하게 되면 기준 branch 앞에 branchName의 branch들이 있게 된다.
  2. git merge —no-ff [branchName]
    1. —squash와 다르게 새로운 commit을 추가하면서 merge한다.

'이해를 위한 기록들' 카테고리의 다른 글

Skeleton UI 적용기  (0) 2023.01.11
드디어 정규 표현식  (0) 2022.12.22
jest 기초  (0) 2022.12.12
Typescript와 OOP SOLID 원칙  (0) 2022.11.29
홈페이지가 보여지는 원리  (0) 2022.11.08