You will be fine

<Git> 2. Git GitHub 입문 - part3

by BFine
반응형

Git Github 입문

Chapter 10 - Git 고급

10.0 Git 고급명령어

명령어 기능
git tag commit을 참조하기 쉽게 이름을 붙인다
git commit -amend 최종 commit을 취소하고 새로운 내용을 덮어 쓸 수 있다.
git revert 이전 작성 commit을 삭제하면서 이에 대한 commit이 만들어진다.
git reset 이전 버전으로 되돌릴때 사용한다 commit은 만들어지지 않는다.
git checkout HEAD – 파일 commit하지 않은 변경 내역을 취소한다.
git rebase / -i 병합할때 사용하며 branch가 많을경우 이력확인하면서 병합/ 다른 두개의 커밋내역을 합친다.

10.1 Git tag : 특정 commit을 참조하는 이름 붙이기

  • git에서 HEAD 는 현재 작업하는 branch를 가르키는 포인터이다.
  • git log -숫자는 최신commit부터 숫자만큼 불러온다.
  • tag는 git tag 태그이름으로 붙일 수 있다. git log로 확인할 수 있다.
  • 특정 commit에 붙이려면 commit 체크섬값 앞 4자리를 뒤에 붙이면 된다.
  • annotated tag(-a 옵션)는 누가 언제 왜(+ 메세지) 이 tag를 붙였는지 알 수 있다.(git show tag명으로 볼 수 있다.)
$ git tag 특정 d77a
 
$ git log
commit d77ae42a7228d72664efcaccb7798005167691f8 (tag: 특정)
Date:   Fri May 3 16:03:03 2019 +0900
    1
 
$ git show-ref --tags
d77ae42a7228d72664efcaccb7798005167691f8 refs/tags/특정

10.2 Git commit --amend : 마지막 commit 수정하기

  • git commit --amend로 마지막 commit과 현재 commit이 합쳐진 새로운 commit을 만들 수 있다.
  • 변경내역이 없을경우 commit 메세지만 변경한다.
  • SHA-1 체크섬 값이 변화하는데 이는 수정이 아닌 commit을 새롭게 만든다 는 의미로 볼 수 있다.

10.3 Git revert : 공개된 commit의 변경 내역 되돌리기

  • commit 내역을 수정하는 것은 좋은 방법이 아니다.
  • 수정하지 않고 이전이 commit으로 되돌리는 것이 git revert 이다. (revert 한 것은 commit으로 남는다)
  • 해당 지점의 commit 내용을 없던일로 처리 하는 것이라 볼 수 있다.(이전 commit 기록은 남겨둔다)
  • 즉 revert를 실행한 시점부터 현재 commit 까지 변경내역을 거꾸로 적용 하는 commit을 만드는 것이다.
  • ex) 1 2 3 4 commit 있을때 2번내역을 지우고 싶은 경우 revert 2번 체크섬값을 하면 새로운 commit 생긴다.
  • 그리고 ls 해보면 2번 파일은 사라지고 1 3 4 파일만 남은 것을 확인 할 수 있다.

10.4 Git revert : 이전 작업 결과를 저장한 상태로 되돌리기

  • git reset은 이전 commit을 남기지 않고 새로운 commit을 남긴다 는 차이가 있다.
  • 그리고 3가지 모드가 존재한다. (인덱스는 commit전에 변경 내역을 담는 준비영역,디렉터리는 실제저장소)
    1. hard -> HEAD 변경, 인덱스 변경, 디렉터리 변경
    2. mixed -> HEAD 변경, 인덱스 변경, 디렉터리 변경안함 (기본값)
    3. soft -> HEAD 변경, 인덱스 변경안함, 디렉터리 변경안함
  • ex) 1 2 3 있을때 hard는 파일도 삭제, soft는 파일 보존, git add 상태가 된다.
  • 명령옵션은 branch명 or HEAD^,~ 이뜻은 개수만큼 커밋을 되돌린다 (~하나면 바로 이전 commit)
  • ORIG_HEAD 지운 커밋 내역을 보관하고 이를 통해 되돌릴 수 있다.
$ git reset --hard HEAD~
HEAD is now at 01a86f2 1
 
$ git reset --hard ORIG_HEAD
HEAD is now at 01a22c4 2
 

10.5 Git checkout HEAD --filename : 특정파일을 최종 커밋 시점으로 되돌리기

  • git checkout HEAD -- filename은 파일 하나의 변경내역을 원래대로(이전commit) 되돌릴때 사용한다.
  • 바로 전 commit 상태로 돌아가는 것이므로 현재 수정한 내역들이 돌아간다.
  • 특정 commit 시점으로 바꿀때는 HEAD를 체크섬값으로 바꿔서 명령을 실행하면 된다.
  • reset(hard 제외)는 commit만 되돌린다면 이것은 내용을 완전히 바꾼다.

10.6 Git rebase : 브랜치 이력을 확인하면서 병합하기

  • merge시 충돌이 발생할 경우 처리하고 해결한 commit을 남기는데 여러번 발생 할 경우 계속해야한다.
  • git rebase는 commit 내역을 깔끔하게 정리 해서 merge 할 수 있다는 장점이 있다.
  • base를 다시 정하는 것 과 같고 merge할 branch 앞으로 commit 내역을 옮기는 것 이라 볼 수 있다.
  • merge 할때 --no-ff를 사용하면 일렬로 merge 되지않고 branch 그래프가 보여진다.
  • rebase 옵션은 3가지가 있다.
    1. --continue는 충돌상태를 해결하고 작업을 진행한다.
    2. --skip은 병합 대상의 branch 내용으로 강제병합한다.
    3. --abort는 rebase 명령을 취소한다.

10.6 Git rebase -i : 커밋 내역 합하기

  • i는 interativce의 약자로 상호작용하면서 rebase할 commit을 고르는 것이다.
  • commit 내역과 작업 내역을 모두 합해서 깔끔한 정리가 가능하다.
  • git rebase -i HEAD~~ 하면 최근 commit 2개가 합쳐진다.
    1. 남기는 메세지 앞에는 pick을 붙인다.
    2. 없애는 메세지 앞에는 fixup을 붙인다.

출처

반응형

'공부(2018~2019) - 스킨변경전 > Git' 카테고리의 다른 글

<Git> 1. Git GitHub 입문 - part1  (0) 2019.05.02

블로그의 정보

57개월 BackEnd

BFine

활동하기