ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • GIT 용어 및 명령어 정리
    Developer/git 2021. 1. 27. 23:17

    GIT 이란?

    코딩 이력 관리, 형상 관리 도구, 분산 버전 관리 시스템 등등 다양한 설명들이 존재한다.

    위키피디아의 설명으로 이해하면

    Git is a distributed version-control system
    for tracking changes in any set of files,
    originally designed for coordinating work among programmers cooperating on source code during software development.

    (1) 파일들의 변화를 트래킹하고

    (2) 여러 명의 개발자들이 작업파일(소스코드)들에 협업하는 과정을 조율한다

     

    GIT 을 이용하면 잘못 수정한 내용을 되돌릴 수도 있고,

    다른 사람의 작업내용을 나의 로컬환경으로 끌어올 수 있으며,

    공동의 작업환경에 자신의 작업내용을 구별된 형태로 업로드할 수 있습니다.

    GIT 용어정리

    GIT 은 remote repository(원격 저장소)로 나의 작업환경을 올리기까지 여러 임시 저장소를 두고 있습니다.

    working directory 는 내가 작업하고 있는 나의 로컬 환경을 일컫습니다.

    working directory 에서 수정한 내용을 Index 에 add 하고 commit 하여 local repo (원격 저장소) 에 저장할 수 있습니다.

    여러개를 수정하게 되면 내가 한 단위의 수정이라고 판단되는 만큼 add 하여 Index 에 저장하고,

    그 후 commit 하면 픽스한 상태로 로컬 저장소에 저장됩니다.

    마지막으로 push 하면 다른 협업개발자들이 볼 수 있는 remote repo 로 올라가게 됩니다.

    (working directory : 실제 파일이 위치한 나의 디렉토리)

                        - add ->       - commit ->      - push ->
    ------------------------------------------------------------------------------
    |  working_directory   |     Index     |   local repo   |    remote repo     |
    ------------------------------------------------------------------------------
                     <- checkout -                     <- fetch -
    • Index : 확정할 준비가 된 변경사항들을 보관한 곳 = Staging area 라고 한다 Staging 변경사항들을 확정할 준비를 한다. = 커밋시킬 내용을 묶는다.
    • HEAD : 작업중인(=체크아웃된) 브랜치의 선두를 가리키는 포인터 = 가장 최근 커밋을 가리킴 : git 의 명령어들은 보통 HEAD 를 변경하는 것으로 시작한다
    • local repo : 컴퓨터 내 로컬 저장소
    • remote repo : 호스팅 서비스(i.e. github, gitlab, bitbucket) 와 같은 원격 저장소

    명령어에서 확인되는 용어들

    • HEAD^ : 헤드의 직전위치
    • origin : = remote repo = original repository's url 를 지칭하는 alias = 원격저장소
    • master : = local branch를 가리키는 포인터 ( in my computer)
    • origin/master : = remote branch를 가리키는 포인터 (remote repo name)/(branch name) 형식.

    GIT 명령어 정리

    git add

    • git add 작업파일 : Index(Staging area) 에 저장한다
    • git add -p : 파일의 변경사항을 파일 단위(hunk)로 나뉘어 add&commit 이 가능해진다

    git commit

    • git commit : Staging 된 수정 사항들을 하나의 커밋으로 묶어 local repo 에 저장한다

    git checkout

    = HEAD(작업위치를 가리키는 포인터) 의 위치를 변경

    • git checkout BRANCH_NAME : 특정 브랜치로 이동한다
    • git checkout -b NEW_BRANCH_NAME : 현재 브랜치의 HEAD에서 새 브랜치를 생성한다
    • git checkout . : 현재 브랜치의 HEAD로 이동한다 = HEAD는 로컬에 남아있는 수정사항들을 가리키지 않는다. 현재 브랜치에서 마지막으로 커밋된 내용을 가리키고 있다. = 커밋되지 않은 내용들을 리셋시킨다

    git fetch

    • git fetch origin : origin(=원격저장소) 로 fetch 한다
    • remote repo 의 변경사항(커밋들)을 local repo 로 가져온다
    • origin/master(=remote branch pointer)를 최신 위치(remote repo)로 업데이트 한다

    git merge

    • 작업중인 브랜치와 다른 브랜치의 커밋들을 병합한다

    • git merge BRANCH_NAME

    • 두 브랜치가 같은 파일을 수정중이면 쉽게 Conflict (충돌)이 발생할 수 있는데, 충돌난 파일로 가보면 충돌된 내용을 표시되어 있다. 충돌을 풀어서 git add 로 저장한 다음 merge 를 이어가면 된다.

    <<<<<<< HEAD:test.go
    fmt.Println("test data to be merged")
    =======
    fmt.Println("test out-of-date data")
    >>>>>>> sdf9g4h:commit test

    git pull

    • git fetch + git merge
    • fetch 로 원격 저장소의 커밋내용들을 로컬 저장소로 가져와 해당 내용으로 로컬 저장소의 커밋들과 병합한다
    • git pull origin BRANCH_NAME

    git log

    • git log -p : 각 커밋의 diff 결과를 보여준다
    • git log --stat : 커밋의 통계 정보를 조회
    • git log --oneline --graph --decorate --all : 모든 커밋정보들을 tree 형태로 볼 수 있다

    git branch

    • git branch -d BRANCH_NAME : git branch 삭제
    • git branch -r : 원격 branch 확인하기
    • git branch -a : 모든 branch 확인하기

    git reflog

    • git 이력을 확인
    • commit_id(hash_id) head command option 순으로 확인 가능하다
    • commit_id 를 확인하여 삭제된 커밋, 브랜치를 복구할 수 있다

    git reset

    • HEAD 를 특정 커밋으로 옮긴다. 단, git revert 와 달리 커밋 히스토리를 남기지 않는다.
    • 과거 버전으로 돌아가기, 잘못된 병합 취소 등을 수행할 수 있다
    • --mixed : 헤드와 인덱스만 변경 (default)
    • --soft : 헤드만 변경
    • --hard : 작업 디렉토리, 헤드, 인덱스 모두 변경

    git rebase

    • 작업중인 브랜치의 HEAD 위치를 재배치한다
    • git rebase origin/master : 현재 작업하고 있는 브랜치가 origin/master(=원격 저장소의 master branch) 를 가리키도록 한다.
    • git rebase --continue : confilct 발생 시 코드 고치고 해당 명령어로 진행
    • git rebase --abort : confilct 발생 시 rebase 취소
    • git rebase -i HEAD~5 : i 옵션으로 interactive 하게 커밋 내용들을 수정할 수 있다.

    git stash

    • commit 되지 않은 working directory의 수정사항들을 임시 저장한다.
    • 필요할때 꺼내 쓸 수 있다. 다만 stack 처럼 작동하여 선입후출. 가장 최근에 stash 된 내용부터 꺼낼 수 있다.
    • git stash : working dir 에 있는 변경사항들을 임시 스택에 저장한다
    • git stash pop : git stash 스택에 들어있는 내용을 가장 최신부터 꺼내 적용한다

    git push

    • 원격 저장소로 해당 브랜치를 올린다
    • git push -f origin NEW_BRANCH
    • git push —delete origin DEL_BRANCH : 원격 저장소에 올라간 브랜치를 지울 수도 있다

    git cherry-pick

    • 다른 브랜치에서 작업한 커밋들을 복사해서 현재의 브랜치로 붙여넣는다
    • git cherry-pick 커밋ID : 여러개의 연속된 커밋들을 가져올 수도 있다

     

     

    'Developer > git' 카테고리의 다른 글

    GIT 상황별 명령어 정리  (0) 2021.01.27
Designed by Tistory.