[git] git 명령어 정리

GilLog·2020년 11월 25일
1

형상관리

목록 보기
2/8
post-thumbnail

git

git이란 Source Code관리를 위한 분산 버전 관리 시스템이다.

최초로 리눅스 토발즈가 리눅스 커널 개발에 이용하려고 개발하였다.

코드 버전을 관리함으로써, 배포후 major bug 발생시 빠르게 rollback 하거나 수정된 코드만을 파악하여 bug를 빠르게 찾거나, 한 프로젝트의 코드를 여러 사람이 함께 작업 할 수 있도록 도와주는 등 사용하면 많은 이점을 가지고 있다.


git 간단 정리

git의 저장소는 3가지 단계로 나누어 진다.

  1. Commit한 Source가 보관되는 Repository

  2. 현재 프로젝트 파일들이 있는 Working Tree

  3. RepositoryWorking Tree의 버퍼영역으로 Commit될 대상이 저장되는 Staging Area

git은 빈 디렉토리는 추적하지 않는다.

형상관리를 하지 않을 파일은 .gitignore 파일에 추가한다.

HEAD는 현재 브랜치의 가장 최신 Commit을 의미한다.

기본 원격 저장소를 origin이라고 부른다.


git command

config

git config --global --list

현재 설정정보 조회할 수 있다.
--global 옵션은 전역설정에 대한 옵션이며 현재 프로젝트에만 적용할때는 주지 않는다.

git config --global user.name "사용자명"

사용자명을 등록한다. (필수)

git config --global user.email "이메일주소"

이메일 주소를 등록한다. (필수)

git config --global color.ui “auto”

터미널에 표시되는 메시지에 컬러를 표시해준다.

Basic

git --version

현재 git의 버전을 확인한다.

git init

현재 디렉토리에 git 저장소를 생성한다.

git add 파일명

git add는 2가지 기능을 수행 하는데 untracked files의 파일들을 git가 추적하도록 하거나 파일은 수정했지만 아직 스테이징 영역에 올라가지 않은(Changed but not updated) 파일들을 스테이징 영역에 올린다.

-i 옵션을 주면 대화형모드가 시작되며 파일의 일부분만 선택해서 스테이징하는 것이 가능하다.

-p 옵션을 사용하면 -i 대화형모드없이 바로 패치모드를 사용할 수 있다.

git commit -m "커밋메시지"

스테이징 영역에 올라가 있는 파일들을 커밋한다.

-m 은 커밋메시지를 주는 옵션으로 여러 줄의 커밋메시지를 쓸 경우 -m 을 여러개 사용할 수 있다.

-a 옵션을 사용하면 스테이징에 올리는 작업과 커밋을 동시에 할 수 있습니다.
이때 추적되지 않는 파일은 추가하지 않는다.

-m을 사용하지 않을때 -v옵션을 사용하면 편집기에 커밋하려는 변경사항의 다른점을 보여준다.

특정파일만 커밋하려면 마지막에 파일명을 추가해주면 된다.

git commit -C HEAD -a --amend

지정한 커밋의 로그메시지를 다시 사용하여 기존커밋을 수정한다.
-c를 사용하면 기존메시지를 수정할 수 있는 편집기를 실행한다.

git status

커밋되지 않은 변경사항을 조회한다.

git diff

스테이징영역과 현재 작업트리의 차이점을 보여준다.

--cached 옵션을 추가하면 스테이징영역과 저장소의 차이점을 볼 수 있다.

git diff HEAD를 입력하면 저장소, 스테이징영역, 작업트리의 차이점을 모두 볼 수 있다.

파라미터로 log와 동일하게 범위를 지정할 수 있으며 --stat를 추가하면 변경사항에 대한 통계를 볼 수 있다.

git mv 파일명 새파일명

기존에 존재하는 파일을 새파일로 이동한다.

변경이력은 그대로 유지한다.

git checkout -- 파일명

아직 스테이징이나 커밋을 하지 않은 파일의 변경내용을 취소하고 이전 커밋상태로 돌린다.

svn에서 revert와 동일하다.

Branch & Tag

git branch

현재 존재하는 브랜치를 조회한다.
-r 옵션을 사용하면 원격저장소의 브랜치를 확인할 수 있다.

git branch 브랜치명B 브랜치명A

브랜치명A에서 새로운 브랜치 브랜치명B를 만든다.
git에서 기본 브랜치는 master라는 이름을 사용

git branch 브랜치명

브랜치명의 새로운 브랜치를 만든다.
체크아웃은 하지 않는다.

git branch -d 브랜치명

브랜치를 삭제한다.

git branch -m 존재하는브랜치명 새로운브랜치명

존재하는 브랜치를 새로운브랜치로 변경한다.
이미 존재하는 브랜치명이 있을 경우에는 에러가 나는데 -M 옵션을 사용하면 이미 있는 브랜치의 경우에도 덮어씌운다.

git tag 태그명 브랜치명

브랜치명의 현재시점에 태그명으로 된 태그를 붙힌다.

git tag만 입력하면 현재 존재하는 태그 목록을 볼 수 있다.

git checkout 브랜치명/태그명

해당 브랜치나 태그로 작업트리를 변경한다.

git checkout -b 브랜치명B 브랜치명A

브랜치명A에서 브랜치명B라는 새로운 브랜치를 만들면서 체크아웃을 한다.

git rebase 브랜치명

브랜치명의 변경사항을 현재 브랜치에 적용한다.

git merge 브랜치명

브랜치명의 브랜치를 현재 브랜치로 합친다.

--squash 옵션을 주면 브랜치명의 모든 커밋을 하나의 커밋으로 만든다.

git cherry-pick 커밋명

커밋명의 특정 커밋만을 선택해서 현재 브랜치에 커밋으로 만든다.

-n 옵션을 주면 작업트리에 합치지만 커밋은 하지 않기 때문에 여러개의 커밋을 합쳐서 커밋할 수 있다.

log

git log

커밋 로그들을 볼 수 있으며 -1나 -2같은 옵션을 주어 출력할 커밋로그의 갯수를 지정할 수 있다.

--pretty=oneline 옵션을 주면 한줄로 간단히 보여주고,
--pretty=format:"%h %s"처럼 형식을 정해줄 수 도 있다.

-p 옵션을 사용하면 변경된 내용을 같이 보여준다.

--since="5 hours" 이나 --before="5 hours"같은 옵션도 사용가능하다.

--graph 옵션을 주면 브랜치 트리를 볼 수 있다.

git log 커밋명

해당 커밋명의 로그를 볼 수 있다.

커밋명A..커밋명B ..와 같이 입력하면 커밋명A이후부터 커밋명B까지의 로그를 볼 수 있다.

^은 -1과 동일해서 HEAD^라고 하면 최신바로 이전 커밋이고 HEAD^^^와 같이 쓸 수 있으며 HEAD~3을 하면 HEAD의 3개 이전의 커밋을 의미 한다.

git blame 파일명

갈 줄 앞에 커밋명과 커밋한 사람등의 정보를 볼 수 있다.

git blame -L 10,15 파일명

-L 옵션을 사용하면 10줄부터 15줄로 범위를 지정해서 볼 수 있고, 15대신 +5와 같이 사용할 수 있다.

숫자의 범위 대신 정규식도 사용이 가능하다.

git blame -M 파일명

-M 옵션을 사용하면 반복되는 패턴을 찾아서 복사하거나 이동된 내용을 찾아준다.

-C -C 옵션을 사용하면 파일간의 복사한 경우를 찾아준다.

-C -C는 git log에서도 사용가능하며 내용의 복사를 찾을때는 git log에서 -p옵션을 사용합니다.

git revert 커밋명

기존의 커밋에서 변경한 내용을 취소해서 새로운 커밋을 만든다.

-n 옵션을 사용하면 바로 커밋하지 않기 때문에 revert를 여러번한 다음에 커밋할 수 있다.

단, 항상 최신의 커밋부터 revert 해야한다.

git reset 커밋명

이전 커밋을 수정하기 위해서 사용한다.

--soft 옵션을 사용하면 이전 커밋을 스테이징하고 커밋은 하지 않으며,
--hard 옵션은 저장소와 작업트리에서 커밋을 제거한다.

git reset HEAD^와 같이 입력하면 최근 1개의 커밋을 취소할 수 있다.

git rebase -i 커밋범위

-i 옵션으로 대화형모드로 커밋 순서를 변경하거나 합치는 등의 작업을 할 수 있다.

Remote Repository

git clone 저장소주소 폴더명

원격저장소를 복제하여 저장소를 생성한다.

폴더명은 생략가능하다.

git fetch

원격저장소의 변경사항 가져와서 원격브랜치를 갱신한다.

git pull

git fetch에서 하는 원격저장소의 변경사항을 가져와서 Local Branch에 합치는 작업을 한꺼번에 수행 한다.

파라미터로 풀링할 원격저장소와 반영할 지역브랜치를 줄 수 있다.

git push

파라미터를 주지 않으면 origin 저장소에 푸싱하며 현재 지역브랜치와 같은 이름의 브랜치에 푸싱한다.

--dry-run 옵션을 사용하면 푸싱된 변경사항을 확인할 수 있다.

로컬에서 tag를 달았을 경우에 기본적으로 푸싱하지 않기 때문git push origin 태그명이나 모든 태그를 올리기 위해서 git push origin --tags를 사용해야 한다.

git remote add 이름 저장소주소

새로운 원격 저장소를 추가한다.

git remote

추가한 원격저장소의 목록을 확인할 수 있다.

git remote show 이름

해당 원격저장소의 정보를 볼 수 있다.

git remote rm 이름

원격저장소를 제거한다.

Submodule

git submodule

연관된 하위모듈을 확인할 수 있다.

git submodule add 저장소주소 서브모듈경로

새로운 하위모듈을 해당경로에 추가한다.

추가만 하고 초기화 하지는 않으면 커밋 해쉬 앞에 마이나스(-) 표시가 나타난다.

git submodule init 서브모듈경로

서브모듈을 초기화한다.

git submodule update 서브모듈경로

서브모듈의 변경사항을 적용한다.

저장소의 최신커밋을 추적하지 않는다.

ETC

git archive --format=tar --prefix=폴더명/ 브랜치혹은태그 | gzip > 파일명.tar.gz

git archive --format=zip --prefix=폴더명/ 브랜치혹은태그 > 파일명.zip

해당 브랜치나 태그를 압축파일로 만든다.

--prefix 를 주면 압축하일이 해당 폴더 안에 생성되도록 할 수 있다.

git mergetool

설정에 merge.tool의 값에 있는 머지툴을 찾아서 실행한다.

git gc

저장소의 로그를 최적화 한다.

로그가 변경되지는 않고 저장하는 방식만 최적화한다.

--aggressive 옵션을 주면 더 자세하게 최적화한다.

git rev-parse --show-toplevel

git 저장소내에서 입력하면 루트 디렉토리를 알려준다.

명령어 단순 요약

git init : git 생성하기
git clone git_path : 코드가져오기
git checkout branch_name : 브랜치 선택하기
git checkout -t remote_path/branch_name : 원격 브랜치 선택하기
git branch branch_name : 브랜치 생성하기
git branch -r : 원격 브랜치 목록보기
git branch -a : 로컬 브랜치 목록보기
git branch -m branch_name change_branch_name : 브랜치 이름 바꾸기
git branch -d branch_name : 브랜치 삭제하기
git push remote_name — delete branch_name : 원격 브랜치 삭제하기 ( git push origin — delete gh-pages )
git add file_path : 수정한 코드 선택하기 ( git add * )
git commit -m “commit_description” : 선택한 코드 설명 적기 ( git commit -m “내용”)
git push romote_name branch_name : add하고 commit한 코드 git server에 보내기 (git push origin master)
git pull : git서버에서 최신 코드 받아와 merge 하기
git fetch : git서버에서 최신 코드 받아오기
git reset — hard HEAD^ : commit한 이전 코드 취소하기
git reset — soft HEAD^ : 코드는 살리고 commit만 취소하기
git reset — merge : merge 취소하기
git reset — hard HEAD && git pull : git 코드 강제로 모두 받아오기
git config — global user.name “user_name ” : git 계정Name 변경하기
git config — global user.email “user_email” : git 계정Mail변경하기
git stash / git stash save “description” : 작업코드 임시저장하고 브랜치 바꾸기
git stash pop : 마지막으로 임시저장한 작업코드 가져오기
git branch — set-upstream-to=remote_path/branch_name : git pull no tracking info 에러해결

🙆‍♂️ 참고사이트 🙇‍♂️

Git 명령어 정리[Outsider's Dev Story]

자주 사용하는 기초 Git 명령어 정리하기[Andrew park]

A successful Git branching model[Vincent Driessen]

profile
🚀 기록보단 길록을 20.10 ~ 22.02 ⭐ Move To : https://gil-log.github.io/

0개의 댓글