Git 주요 명령어 정리(1)

조성철 (JoSworkS)·2020년 7월 20일
1

TIL(Today I Learned)

목록 보기
70/73
post-thumbnail

아래 글은 'いまさらだけどGitを基本から分かりやすくまとめてみた'을 번역하여 정리한 글입니다.
출처: https://qiita.com/gold-kou/items/7f6a3b46e2781b0dd4a0

Git이란?

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
-https://git-scm.com/

  • 소스코드 등을 관리할 수 있는 분산형 버전 관리 시스템
  • github, gitlab, gitbucket, bitbucket 등 git을 이용한 서비스가 다수 존재
  • 로컬에 리모트 repository의 복제해 여러 명이 각각의 로컬에서 자유롭게 파일의 편집이나 로컬 커밋이 가능하다는 것이 특징

Clone

  • 리모트 repository를 로컬에 다운로드
  • 리모트 branch 상에 복수의 브랜치가 존재하는 경우는 모든 브랜치를 일괄 다운로드
  • 리모트 Repository의 URL은 아래 화면처럼 웹 화면에서 취득 가능
$ git clone <취득한 URL>


Branch

  • 브랜치는 작업이력의 가지를 나눠서 기록해주는 역할
  • 브랜치 상의 변경은 통합(merge)될 때 까지 다른 브랜치에 영향을 끼치지 않고, 받지도 않음

Branch model

  • 브랜치 모델은 브랜치를 어떻게 운용할 것인가에 대한 것
  • git-flow와 github flow가 일반적으로 유명

git-flow model

  • 세세하게 브랜치를 나눈 엄격한 운용 모델
  • 브랜치는 master, develop, release, feature, hotfix, support 6개로 운용


1. master branch

  • 배포 가능한 퀄리티를 보증하는 브랜치
  • release 브랜치로 부터 머지되어 갱신
  • master 브랜치 상의 직접 작업한다거나 커밋하는 것은 NG
  • tag는 master 브랜치상에서만 존재

참고: tag

  • 보통 릴리즈할 때 사용한다(v1.0 등)

2. develop 브랜치

  • 개발의 주축이 되는 브랜치
  • master 브랜치로 부터 파생
  • master 브랜치와 마찬가지로 develop 브랜치 상의 직접 작업한다거나 커밋하는 것은 NG
  • develop 브랜치로 부터 feature 브랜치나 release 브랜치를 만듦

3. feature 브랜치

  • 기능 추가 또는 수정작업을 하기 위한 브랜치
  • develop 브랜치로부터 파생
  • 작업 완료하고 리뷰가 통과되면 develop 브랜치에 머지(merge)
  • 어떤 작업이 이루어진 브랜치인지 한 눈에 알 수 있도록 브랜치 이름을 작명
  • 머지되면 해당 feature 브랜치는 삭제

4. hotifx 브랜치

  • 배포가 끝난 것을 긴급 수정하기 위한 용도의 브랜치
  • master 브랜치로 부터 파생
  • 수정작업 완료 후에는 master 브랜치와 develop 브랜치에 머지
  • master 브랜치에 머지할 때의 커밋은 배포할 때의 태그를 사용
  • 머지된 hotfix 브랜치는 삭제

5. support 브랜치

  • 구 버전을 서포트하기 위한 브랜치
  • 필수는 아니지만 구 버전을 서포트하는 필요가 있는 경우에는 master 브랜치의 tag로부터 support 브랜치를 파생
  • 구 버전에서 버그가 발생한 경우에는 support 브랜치 상의 직업 디버깅 작업을 하고 커밋 실시
  • 버그가 과거의 여러 버전에 걸쳐있는 경우에는 수정 커밋은 대상의 모든 버전의 support 브랜치에 cherry-pick 실시
  • 서포트가 완료되면 해당 support 브랜치는 삭제

참고: cherry-pick


github flow model

  • 간략화 된 브랜치 운용 모델
  • master, topic 2개의 브랜치로 운용


1. master 브랜치

  • 배포 가능한 퀄리티를 보증하는 브랜치
  • git-flow 모델에서의 master + develop
  • master 브랜치상에서 직접 작업을 하거나 커밋하는 것은 NG
  • 배포 작업은 master 브랜치 상에서 실시
  • release 브랜치는 사용 x

2. topic 브랜치

  • 기능 추가나 버그 수정을 하는 브랜치
  • 파일 편집작업은 여기에서 실시
  • master 브랜치로 부터 가지가 나뉘어 지는 유일한 브랜치
  • git-flow 모델에서의 feature + hotfix
  • master 브랜치에 머지된 topic 브랜치는 삭제

브랜치(branch) 생성/조회

브랜치 생성

$ git branch study

브랜치 조회

$ git branch
* master
  study

브랜치 변경(이동)

$ git checkout study
Switched to branch 'study'

$ git branch
  master
* study

브랜치 생성 + 변경(이동)

  • 신규 브랜치의 생성과 변경(이동)을 동시에 실시
$ git checkout -b study2
Switched to a new branch 'study2'

$ git branch
  master
  study
* study2

브랜치 이름 변경

$ git branch -m study2 study3

$ git branch
  master
  study
* study3

브랜치 삭제

$ git branch
* master
  study
  study3

$ git branch -d study3
Deleted branch study3 (was b1eca08).

$ git branch
* master
  study

Remote repository

Remote repository 조회

$ git remote
origin

Remote repository 조회(URL 표시)

$ git remote -v
origin  http://XXXXX (fetch)
origin  http://XXXXX (push)

Remote repository 추가

  • 임의의 이름으로 등록
$ git remote add sample_remote https://XXXXX

$ git remote -v
origin  http://XXXXX (fetch)
origin  http://XXXXX (push)
sample_remote   https://XXXXX (fetch)
sample_remote   https://XXXXX (push)

Remote repository 삭제

$ git remote rm sample_remote
$ git remote -v
origin  http://XXXXX (fetch)
origin  http://XXXXX (push)

Working directory에서 remote repository까지의 흐름

  1. Working directory
  • 파일을 편집하는 장소
  • 여기에서 파일의 편집, 추가, 삭제 등 실시
  1. Staging area
  • 커밋하기 위해 파일을 기록하는 곳
  • Working directory에서 편집한 파일은 add 명령어로 Staging area에 이동

  1. Local repository
  • remote repository에 업로드하기 위해 커밋(commit) 이력과 파일을 기록하는 곳
  • Staging area 상의 파일을 commit 명령어로 local repo에 커밋 실시
  1. Remote repository
  • 복수의 사람이 공유하는 곳
  • 로컬에서 커밋한 파일을 push 명령어로 Remote repository에 업로드


git status

  • 이전 커밋과 비교해서 변경 내용을 표시
$ git status

git add

  • working director 상의 편집, 추가한 파일을 Stage area에 추가
$ touch study.txt

$ git add study.txt

$ git status
On branch sample
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   study.txt

git commit

  • 보통 git commit -m "커밋 내용"의 형태로 CLI에서 실시
  • commit message를 적는 방법은 팀에 따라 상이
$ git commit -m "Add study.txt"
[sample a8a060c] [add]refs #1 study.txt 추가
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 study.txt

참고자료: 좋은 git commit 메시지를 위한 영어 사전


git push

  • local repo의 브랜치를 remote repo에 업로드
  • git push -f 옵션으로 강제 push도 가능 (rebase 후에는 -f 옵션 필요)
$ git branch
  master
* study

$ git push origin study
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 512 bytes | 0 bytes/s, done.
Total 6 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2)
remote: Updating references: 100% (1/1)
To http://XXXXX
 * [new branch]      study -> study

추가적인 학습을 위한 참고자료

  • 아래 링크들 참고
  1. https://git-scm.com/docs
  2. https://git-scm.com/book/ko/v2
  3. https://opentutorials.org/module/3963/24442
  4. https://www.holaxprogramming.com/2018/11/01/git-commands/

0개의 댓글