Git 명령어 정리📄

Seoyul Kim·2020년 12월 29일
0

Git이란?

  • 형상 관리 도구(버전 관리 시스템) 중 하나로 소프트웨어를 개발하는 기업의 핵심 자산인 소스 코드를 효과적으로 관리할 수 있게 해준다.

  • 전체 개발 이력을 각 개발자의 로컬로 복사본을 제공하고 변경된 이력을 다시 하나의 저장소로 복사한다.

  • 이러한 변경은 추가 개발 지점을 가져와, 로컬 개발 지점과 동일하게 병합(merge)할 수 있으며, 저장소는 Git protocol 및 HTTP로 쉽고 효율적(특별한 웹서버 구성없이)으로 접근할 수 있다.

    -비선형(여러갈래) 개발 이력을 시각화하고 탐색 할 수 있는 도구를 제공한다.

SVN(Subversion) VS Git

  • git은 중앙 서버에 소스 코드와 히스토리를 저장하는 SVN과 달리 소스 코드를 여러 개발 PC와 저장소에 분산해서 저장하는 분산형 관리 시스템이다. 그렇기 때문에 중앙 서버에 장애가 발생해도 로컬 저장소에 커밋할 수 있으며 로컬 저장소를 이용하여 중앙 저장소의 복원도 가능하다.

  • 사본을 로컬에서 관리하기 때문에 SVN에 비해 훨씬 빠르다.(SVN은 변경 로그 하나를 보는 것도 인터넷을 경유한다.)

장점

  • 소스 코드를 주고 받을 필요 없이 같은 파일을 여러 명이 동시에 작업하는 병렬 개발이 가능하며 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있다.

  • 형상 관리 도구를 사용하면 변경을 쉽게 되돌릴 수 있으며 소스 코드를 과거의 특정 시점으로 되돌리거나 특정 시점의 변경 사항을 취소, 두 버전의 소스코드를 비교할 수 있다.

관련 용어

  • Repository : 저장소를 의미하며, 저장소는 히스토리, 태그, 소스의 가지치기 혹은 branch에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 히스토리를 확인 할 수 있다.

  • Working Tree : 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점.

  • Staging Area : 저장소에 커밋하기 전에 커밋을 준비하는 위치.

  • Commit : 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업.

  • Head : 현재 작업중인 Branch를 가리킨다.

  • Branch : 가지 또는 분기점을 의미하며, 작업을 할때에 현재 상태를 복사하여 Branch에서 작업을 한 후에 완전하다 싶을때 Merge를 하여 작업을 한다.

  • Merge : 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다.

주요 명령어

  • git init : 깃 저장소를 초기화한다. 저장소나 디렉토리 안에서 이 명령을 실행하기 전까지는 그냥 일반 폴더이며, 명령어를 입력한 후에 추가적인 깃 명령어들을 사용할 수 있다.

  • git help : 21개의 가장 많이 사용하는 깃 명령어들이 나타난다. 좀 더 자세하게 “git help init”이나 다른 용어를 타이핑하여 특정 깃 명령어를 사용하고 설정하는 법을 이해할 수도 있다.

  • git status : 저장소 상태를 체크한다. 어떤 파일이 저장소 안에 있는지, 커밋이 필요한 변경사항이 있는지, 현재 저장소의 어떤 브랜치에서 작업하고 있는지 등을 볼 수 있다.

  • git clone : 원격 저장소의 저장소를 내 local에서 이용할 수 있게 그대로 복사해 가져온다.

  • git add : 깃이 파일들을 지켜보게 한다. 파일을 추가하면, 깃의 저장소 “스냅샷”에 포함된다.

  • git commit : 파일을 수정한 후, 저장소의 “스냅샷”을 찍기 위해 사용하는 명령어이다. 보통 “git commit -m “Message hear.” 형식으로 사용한다. -m은 명령어의 다음 부분을 메세지로 남긴다는 뜻이다.

  • git push : 로컬 컴퓨터에서 작업하고 커밋을 깃허브에서 온라인으로도 볼 수 있다.

  • git pull : 로컬 컴퓨터에서 작업할 때, 작업하고 있는 저장소의 최신 버전을 원하면, "git pull"을 통해 깃허브로부터 변경사항을 다운로드할 수 있다.

  • git log : 커밋 내역을 확인해보고 싶을 때 사용하는 명령어이다.

  • git branch : 여러 협업자와 작업하고 자신만의 변경을 원한다면 이 명령어로 새로운 브랜치를 만들고, 자신만의 변경사항과 파일 추가 등의 커밋 타임라인을 만든다. 새 브랜치를 “hello”로 지정하고 싶다면 "git branch hello"라고 쓸 수 있다.

  • git checkout : 현재 위치하고 있지 않은 저장소를 “체크아웃”할 수 있다. 원하는 저장소로 옮겨가게 해주는 탐색 명령이며, 만약 master 브랜치로 이동하고 싶다면, git checkout master를 사용할 수 있다.

  • git merge : 브랜치에서 작업을 끝내고, 모든 협업자가 볼 수 있는 master 브랜치로 병합할 수 있다. "git merge hello"라고 입력한다면 hello 브랜치에서 만든 모든 변경사항을 master로 추가한다.

추가 명령어 및 옵션

  • git remote add <원격 저장소> <저장소 url> : 새로운 원격 저장소 추가

  • git add -p 파일명 : 각 변경 사항을 터미널에서 직접 눈으로 하나씩 확인하면서 스테이징 영역으로 넘기거나 또는 제외할 수가 있다. 많은 변경 내용을 여러 개의 변경 기록으로 나누어서 남기고 싶을 때 유용하게 사용할 수 있다.

  • git add -A: 작업 디렉토리 상에 어디에 위치하든 항상 동일하게 모든 변경 내용을 스테이징으로 넘긴다. git add .는 명령어를 실행한 디렉토리 이하에서 발생한 변경 내용만 포함하며, 해당 디렉토리 기준으로 상위 디렉토리의 변경 내용을 포함하지 않는다.

  • git add -u : 새로 생긴 파일은 제외하며 변경이 있는 파일만을 add할 수 있다.

  • git commit --amend: 마지막 커밋 메세지 고칠 수 있다.

  • git checkout commit: 작업 디렉토리의 모든 파일을 지정한 커밋과 동일한 상태로 업데이트하는 명령이다. 인수 commit은 커밋 해시 또는 태그를 사용할 수 있다.

  • git diff: 마지막 git commit과 현재 작업 트리에서 git add하지 않은 파일 간의 차이를 표시한다.

  • git log --oneline: 각 커밋의 내용을 한 줄로 압축하여 표시하는 명령이다. 이 명령은 커밋 히스토리를 간단히 살펴볼 경우에 적합한다.

  • git revert commit: commit에서 변경한 모든 변경 사항을 되돌려 새로운 커밋으로 생성하고, 그것을 현재 브랜치에 적용하는 명령이다.
    git revert는 하나의 커밋만 원래대로 돌리는 명령(부정)이며, 그 커밋 후에 만들어진 모든 커밋을 취소하고 이전의 상태로 돌아가는 명령(취소)이 아니다. 후자는 reset 명령어를 사용할 수 있다.

  • git reset: git revert 명령이 변경 취소 "안전한" 방법이라고 한다면 git reset 명령은 "위험한" 방법이다. git reset 명령을 사용하여 취소하면 원래 상태로 복원하는 방법은 없다.

(1) hard

돌아가려는 이력이후의 모든 내용을 지워 버린다.

git reset --hard  a3bbb3c

(2) soft

돌아가려 했던 이력으로 되돌아 갔지만, 이후의 내용이 지워지지 않고, 해당 내용의 인덱스(또는 스테이지)도 바로 다시 커밋할 수 있는 상태로 그대로 남아있다.

git reset --soft a2bbb3c
  • git push --delete origin test: 원격 저장소의 브랜치 삭제

  • git stash : 아직 마무리하지 않은 작업을 스택에 잠시 저장할 수 있도록 하는 명령어로 아직 완료하지 않은 일을 commit하지 않고 나중에 다시 꺼내와 마무리할 수 있다.

git stash

// stash 목록 확인
git stash list

//stash 했던 작업 적용
git stash apply

//가장 최근의 stash 제거
git stash drop

//적용과 동시에 스택에서 제거
git stash pop

//git stash 적용 되돌리기
git stash show -p | git apply -R 
  • git checkout -t: 원격 저장소의 branch 가져오기

    • -t 옵션과 원격 저장소의 branch 이름을 입력하면 로컬의 동일한 이름의 branch를 생성하면서 해당 branch로 checkout을 한다.

    • 만약 원격 저장소의 feature/create-new-branch branch를 가져오고 싶다면, 다음과 같이 명령어를 입력하면 된다.

git checkout -t origin/feature/create-new-branch

브랜치 관련 명령어

  • 브랜치 목록 보기
//지역 브랜치 목록 보기
git branch

//원격 브랜치 목록 보기
git branch -r

//지역과 원격을 포함한 모든 브랜치 목록 보기
git branch -a
  • 브랜치 명 변경
git branch -m master mymaster
  • 현재 브랜치에서 새로운 브랜치 생성하고 체크아웃하기
git checkout -b <새로운 브랜치>
  • 커밋하지 않고 합치기
git merge --no-commit <브랜치>
  • 선택하여 합치기
git cherry-pick <커밋명>

//커밋하지 않고 선택하여 합치기
git cherry-pick -n <커밋명>
  • 브랜치 삭제하기
//삭제할 브랜치가 현재 브랜치에 합쳐졌을 경우에만
git branch -d <삭제할 브랜치>

//삭제할 브랜치가 현재 브랜치에 합쳐지지 않았어도
git branch -D <삭제할 브랜치>

git checkout 대체 명령어

  • checkout: Switch branches or restore working tree files
  • switch: Switch branches
  • restore: Restore working tree files

git switch

  • checkout에서 브랜치를 변경하는 부분만 담당한다.
 git switch develop

//브랜치를 새로 만들면서 브랜치 변경까지 하는 git checkout -b <BRANCH_NAME>도 -c 옵션으로 똑같이 사용할 수 있다.

$ git switch -c new-branch

git restore

  • restore는 워킹 트리의 파일을 복원해 주는 역할을 한다.

  • 파일의 수정 내용(README.md 파일을 수정했다고 했을 때)을 복원하려면 git checkout -- README.md처럼 사용했는데 이젠 다음과 같이 사용할 수 있다.

git restore README.md
  • git add를 통해서 수정 내용을 stage에 이미 넣었을 때 이를 다시 빼려면 git reset HEAD README.md를 사용했어야 했는데 이 부분도 restore로 들어왔다.
$ git restore --staged README.md

0개의 댓글