본문 바로가기

프로그래밍/IT

Git 정리

기본 CLI 명령어
  • git init
    현재 폴더에 Git 저장소를 생성합니다. [.git]이 로컬 저장소
  • git add file1 file2
    파일들을 스테이지에 추가합니다. 새로 생성한 파일을 스테이지에 추가하고 싶다면 반드시 add 명령을 사용합니다.
  • git commit
    스테이지에 있는 파일들을 커밋합니다.
  • git commit -a
    add 명령을 생략하고 바로 커밋하고 싶을 때 사용합니다. 변경된 파일과 삭제된 파일은 자동으로 스테이징되고 커밋됩니다. 주의할 점은 untraked 파일은 커밋되지 않습니다.
  • git push (-u) (원격저장소별명)(브랜치이름)
    현재 브랜치에서 새로 생성한 커밋들을 원격저장소에 업로드합니다. -u 옵션으로 브랜치의 업스트림을 등록할 수 있습니다. 한 번 등록한 후에는 git push만 입력해도 됩니다.
  • git pull
    원격저장소의 변경사항을 워킹트리에 반영합니다. 사실은 git fetch + git merge 명렁입니다.
  • git fetch (원격저장소별명) (브랜치이름)
    원격저장소의 브랜치와 커밋들을 로컬저장소와 동기화합니다. 옵션을 생략하면 모든 원격저장소에서 모든 브랜치를 가져옵니다.
  • git merge "브랜치이름"
    지정함 브랜치의 커밋들을 현재 브랜치 및 워킹트리에 반영합니다.
  • git rm --cached file.. or git reset "파일명".. 
    스테이지 영역에 있는 파일들을 스테이지에서 내립니다.(언스테이징) 워킹트리의 내용은 변경되지 않습니다. 옵션을 생략할 경우 스테이지의 모든 변경사항을 초기화합니다.
  • git log
    현재 브랜치의 커밋 이력을 보는 명령어
  • git log -n "숫자"
    전체 커밋 중에서 최신 n개의 커밋만 살펴봅니다. 다양한 옵션과 조합해서 쓸 수 있다.
  • git log --oneline --graph --decorate --all
    자주 사용하는 옵션으로 간결하고 멋지게 보여줍니다.
    --oneline: 커밋 메시지를 한 줄로 요약해서 보여줍니다. 생략하면 커밋 정보를 자세히 표시합니다.
    --graph: 커밋 옆에 브랜치의 흐름을 그래프로 보여줍니다. GUI와 유사한 모습으로 나옵니다.
    --all: all 옵션이 없을 경우 HEAD와 관계없는 옵션은 보여주지 않습니다.
    --decorate: 원래는 --decorate=short 옵션을 의미한다. 브랜치와 태그 등의 참조를 간결히 표시합니다.
  • git help "명령어"
    해당 명령어의 도움말을 표시합니다.
  • git remote add "원격저장소이름" "원격저장소주소"
    1) 원격저장소를 등록합니다.
    2) 원격저장소는 여러 개 등록할 수 있지만 같은 별명의 원격저장소는 하나만 가질 수 있습니다.
    3) 통상 첫 번째 원격저장소를 orgin으로 지정합니다.
  • git remote -v
    원격저장소 목록을 살펴봅니다.
  • git clone "저장소주소" (새로운 폴더명)
    1) 저장소 주소에서 프로젝트를 복제해 옵니다.
    2) 이때 새로 생길 폴더명은 생략 가능하며 폴더명을 생략하면 프로젝트 이름과 같은 이름의 폴더가 새로 생성됩니다.
    3) 저장소 주소는 꼭 원격일 필요가 없으며 로컬저장소도 git clone 명령으로 복제할 수 있습니다.
  • git status
    Git의 워킹트리의 상태를 보는 명령어
  • git status -s
    git status 명령보다 짧게 요약해서 상태를 보여주는 명령으로, 변경된 파일이 많을 때 유용합니다.
옵션 설정

시스템 환경 옵션: PC 전체의 사용자를 위한 옵션명

시스템 환경 옵션 < 전역 옵션 < 지역 옵션

  • 전역 옵션: 현재 사용자를 위한 옵션
  • 지역 옵션: 현재 Git 저장소에서만 유효한 옵션
  • git config --global "옵션명" 
    지정한 전역 옵션의 내용을 살펴봅니다.
  • git config --global "옵션명" "새로운 값"
    지정한 전역 옵숀의 값을 새로 설정합니다.
  • git config --global --unset "옵션명"
    지정한 전역 옵션을 삭제합니다.
  • git config --local "옵션명" 
    지정한 지역 옵션의 내용을 살펴봅니다.
  • git config --local "옵션명" "새로운 값":
    지정한 지역 옵션의 값을 새로 설정합니다.
  • git config --local --unset "옵션명"
    지정한 지역 옵션의 값을 삭제합니다.
  • git config --system "옵션명"
    지정한 시스템 옵션의 내용을 살펴봅니다.
  • git config --system "옵션명" "값"
    지정한 시스템 옵션의 값을 새로 설정합니다.
  • git config --system --unset "옵션명" "값"
    지정한 시스템 옵션의 값을 삭제합니다.
  • git config --list
    현재 프로젝트의 모든 옵션을 살펴봅니다.
좋은 커밋 메시지의 7가지 규칙
  1. 제목과 본문을 빈 줄로 분리한다.
  2. 제목은 50자 이내로 쓴다.
  3. 제목을 영어로 쓸 경우 첫 글자는 대문자로 쓴다.
  4. 제목에는 마침표를 넣지 않는다.
  5. 제목을 영어로 쓸 경우 동사원형(현재형)으로 시작한다.
  6. 본문을 72자 단위로 줄바꿈한다.
  7. 어떻게 보다 무엇과 왜를 설명한다.
Git 용어 설명

워킹트리(working tree)
워크트리, 워킹 디렉토리, 작업 디렉토리, 작업  폴더 모두 같은 뜻으로 사용된다.
일반적으로 사용자가 파일과 하위 폴더를 만들고 작업 결과물을 저장하는 곳을 Git에서는 워킹트리라고 부른다.
공식문서에서는 워킹트리를 '커밋을 체크아웃하면 생성되는 파일과 디렉토리'로 정의하고 있다. 
정확하게는 작업 폴더에서 [.git]폴더(로컬저장소)를 뺀 나머지 부분이 워킹트리이다.

로컬저장소(local repository)
Git init 명령으로 생성되는 [.git]폴더가 로컬저장소입니다. 커밋, 커밋을 구성하는 객체, 스테이지가 모두 이 폴더에 저장된다.

원격저장소(remote repository)
로컬저장소를 업로드 하는 곳을 원격 저장소라고 부른다.
우리가 사용하고 있는 GitHub 저장소가 원격저장소이다

Git 저장소
Git 명령으로 관리할 수 있는 폴더 전체를 일반적으로 Git 프로젝트 혹은 Git 저장소라고 부른다

 

포크(fork)
여러 원격저장소를 만들어 분기를 나눈다.
원본저장소에 영향을 미치지 않으므로 원격저장소에서 마음껏 코드를 수정할 수 있다.
원본저장소의 이력을 보려면 따로 주소를 추가해야 한다.

 

Git GitHub으로 관리하는 프로젝트를 시작하는 데엔 2가지 방식이 있다.
1. GitHub에서 원격저장소를 만들고 이를 내 컴퓨터에 클론한다.
2. 내 컴퓨터에서 먼저 로컬저장소를 만들고 GitHub에 원격저장소를 만들어 로컬저장소에 원격저장소 주소를 remote add 한다.


feat/기능이름
각 개발자가 개발 중인 브랜치 직접 커밋을 올린다.

master
[feat/기능이름]브랜치에서 개발 완료된 코드가 합쳐진 브랜치 출시 전인 베타 버전이라고 볼수 있다.
직접 커밋을 올리지 않는다(병합을 통해서만 코드를 업데이트.)

latest
실제 출시할 코드(대중에게 보여줄 완벽한 코드)를 올리는 브랜치
[master]브랜치에서 굵직한 개발이 끝나면 출시 시점에 [latest]브랜치로 코드를 병합한다.

cherry-pick
다른 브랜치의 커밋 하나만 내 브랜치에 반영하기

reset
Soft/mexed reset: 모든 기억을 남기면서 브랜치를 되돌리기
Hard reset: 모든 기억을 지우며 브랜치를 되돌리기

git reset --hard 이동할 커밋 체크섬
현재 브랜치를 지정한 커미스로 옮긴다. 작업 폴더의 내용도 함께 변경된다.

HEAD~숫자
HEAD~은 헤드의 부모 커밋, HEAD~2는 헤드의 할아버지 커밋을 말한다. HEAD~n은 n번째 위쪽 조상이라는 뜻이다.

HEAD^숫자
HEAD^은 똑같이 부모 커밋이다. 반면 HEAD^2는 두 번째 부모를 카르친다. 병합 커밋처럼 부모가 둘 이상인 커밋에서만 의미가 있다.

revert
커밋의 변경사항을 되돌리는 것

stash
커밋하지 않은 변경 사항을 서랍 속에 넣어두기
tracked 상태(추적중 - 한번이라도 Git에 올렸던 상태)인 파일들만 들어감

 

Git role
  1. master 브랜치에는 직접 커밋을 올리지 않는다(동시에 작업하다 꼬일 수 있으니).
  2. 기능 개발을 하기 전에 master 브랜치를 기준으로 새로운 브랜치를 만든다.
  3. 이 브랜치 이름은 feature/기능이름 형식으로 하고 한 명만 커밋을 올린다.
  4. feature/기능이름 브랜치에서 기능 개발이 끝나면 master 브랜치에 이를 합친다.
Branch( 브랜치)

하나의 원본저장소에서 분기를 나눈다.
하나의 원본저장소에서 코드 커밋 이력을 편하게 볼 수 있다.
다수의 사용자가 다수의 브랜치를 만들면 관리하기 힘들다

브랜치를 사용하는 경우
새로운 기능 추가, 버그 수정, 병합과 리베이스 테스트, 이전 코드 개선, 특정 커밋으로 돌아가고 싶을 때

git branch (-v)
로컬 저장소의 브랜치 목록을 보는 명령으로 -v 옵션을 사용하면 마지막 커밋도 함께 표시됩니다.
표시된 브랜치 중에서 이름 왼쪽에 *가 붙어 있으면 HEAD 블랜치입니다.

git branch (-f) 브랜치이름 (커밋체크섬)
새로운 브랜치를 생성합니다. 커밋체크섬 값을 주지 않으면 HEAD로부터 브랜치를 생성합니다. 이미 있는 브랜치를 다른 커밋으로 옮기고 싶을 때 -f 옵션을 줘야 합니다.

git branch -r(v)
원격 저장소에 있는 브랜치를 보고 싶을 때 사용합니다. 마찬가지로 -v 옵션을 추가하여 커밋 요약도 볼 수 있습니다.

git checkout (브랜치이름)
특정 브랜치로 체크아웃할 때 사용합니다. 브랜치 이름 대신 커밋 체크섬을 쓸 수 있습니다. 하지만 브랜치 이름을 쓰는 방법을 강력히 권장합니다.

git checkout -b (브랜치이름) (커밋 체크섬)
특정 커밋에서 브랜치를 새로 생성하고 동시에 체크아웃까지 합니다. 두 명령을 하나로 합친 명령이기 때문에 간결해서 자주 사용합니다.

git merge (대상 브랜치)
현재 브랜치와 대상 브랜치를 병합할 때 사용합니다. 병합 커밋(merge commit)이 새로 생기는 경우가 많습니다.

git rebase (대상 브랜치)
내 브랜치의 커밋들을 대상 브랜치에 재배치시킵니다. 히스토리가 깔끔해져서 자주 사용하지만 조심해야 합니다.

git branch -d (브랜치이름) 
특정 브랜치를 삭제할 때 사용합니다. HEAD 브랜치나 병합이 되지 않은 브랜치는 삭제 할 수 없습니다.

git branch -D (브랜치이름)
브랜치를 강제로 삭제하는 명령입니다. -d로 삭제할 수 없는 브랜치를 지우고 싶을 때 사용합니다.

 

git tag -a -m 간단한 메세지 태그이름 (브랜치 or 체크섬)
-a로 주석 있는(annotated)태그를 생성합니다. 메시지와 태그 이름은 필수이며 브랜치 이름을 생략하면 HEAD에 테그를 생성합니다.

 

git push "원격저장소 별명" "태그 이름"
원격 저장소에 태그를 업로드 합니다.

git switch "브랜치 이름"
git checkout "브랜치 이름"과 동일한 명령, 현재 브랜치를 변경합니다.

git switch -c "브랜치 이름"
git checkout -b "브랜치 이름"과 동일한 명령, 새로운 브랜치를 만들고 해당 브랜치로 변경합니다.

 

기타

git hash-object "파일명"
일반 파일의 체크섬을 확인할 때 사용합니다.

git show "체크섬"
해당 체크섬을 가진 객체의 내용을 표시합니다.

git ls-files --stage
스테이지 파일의 내용을 표시합니다.
스테이지 파일은 git add 명령을 통해 새성되는데 .git/index 파알이 스테이지 파일입니다.

git cat-file -t "체크섬"
해당 체크섬을 가진 객체의 타입을 알려주는 명령보다

git cat-file "객체타입" "체크섬"
객체의 타입을 알고 있을 때 해당 파일의 내용을 표시해 줍니다.

Tip. 리눅스 명령어

pwd: 현재 폴더의 위치를 확인합니다.
ls -a: 현재 폴더의 파일 목록을 확인합니다. -a 옵션을 이용해 숨기 ㅁ파일도 볼 수 있습니다.
cd: 홈 폴더로 이동합니다. 홈 폴더는 사용자 이름과 폴더명이 같고 내 문서 폴더의 상위 폴더입니다.
cd <폴더이름>: 특정 위치의 디렉토리로 이동합니다.
cd ../: 현재 폴더의 상위 폴더로 이동합니다.
mkdir<새폴더이름> 현재 폴더의 아래에 새로운 폴더를 만듭니다.
echo "sentence": 화면에 ""안의 문장인 "sentence"를 표시합니다.
echo "sentence" > file1.txt: 큰 따음표 안의 텍스트로 file1.txt 파일 생성
cat file1.txt: 파일 변경상태 확인

'프로그래밍 > IT' 카테고리의 다른 글

REST(Representational State Transfer) 란?  (0) 2024.03.11
JWT (JSON Web Tokens) 란?  (0) 2024.02.22
데이터베이스 요약  (0) 2021.04.19
JAVA 프로그래밍 요약  (0) 2021.04.19
가비지컬렉션  (0) 2020.04.29