만들면서 배우는 Git+GitHub 입문 책을 보면서 학습하였습니다.
깃에서 사용하는 고급 명령어 정리
git tag | 커밋을 참조하기 쉽도록 알기 쉬운 이름을 붙여준다. |
git commit --amend | 같은 브랜치 상에 있는 최종 커밋을 취소하고 새로운 내용을 추가하거나 설명을 덧붙인 커밋을 할 수 있다. |
git revert | 이전에 작성한 커밋을 지운다. 그런데 특정 커밋을 내용을 지우는 새로운 커밋을 만들어 지운 내역을 모든 사람이 알 수 있게 한다. |
git reset | 어떤 커밋을 버리고 이전의 특정 버전으로 다시 되돌릴때 사용한다. git revert와 다른점은 커밋 내역을 남기지 않는다는 점이 있다. |
git checkout HEAD --filename | 아직 커밋하지 않은 변경 내역을 취소한다. |
git rebase | git merge처럼 병합할 때 사용한다. 하지만 브랜치가 많을 경우 브랜치 이력을 확인하면서 병합한다. |
git rebase -i | 서로 다른 두 개의 커밋 내역을 합친다. |
1. git tag : 특정 커밋을 참조하는 이름 붙이기
git tag 명령은 저장소의 커밋에 태그를 붙이는 명령어이다. 간단히 버전 이름 같이 이름만 붙이는 light weight 태그와 태그 작성자와 간단한 메모를 함께 태그에 남기는 annotated 태그가 있다.
만약 가장 최근 커밋에 캐그를 붙이고 싶다면 " git tag 태그이름 " 으로 하면된다.
다양한 명령어로 태그를 확인할 수 있다.
2. 특정 커밋에 태그를 붙이는 방법 *우선적으로 sha-1 체크섬 값을 알아야한다.*
명령어를 통해 sha-1 체크섬 값 앞 4자리를 기억해준다.
3. annotated 태그 사용
- 누가 언제 태그를 붙였는지 기록하고 추가 메세지까지 저장함으로써 해당 태그 시점에 누구에게 질문 해야하는지 알 수 있는 편리함이 있다.
똑같이 git log -3 > git tag -a 0.8 '체크섬앞 네자리' 명령을 실행해주면 이와같은 메세지 입력창으로 이동하게 된다.
실행 결과 show를 해보면 자신이 남긴 메세지가 나오는 것을 확인할 수 있다.
4. 마지막 커밋 수정하기 - git commit --amend
마지막 커밋 메시지를 수정하는 명령어이다. 명령어를 실행하면 커밋과 커밋하지 않은 상태에 있는 변경 내역이 서로 합쳐진 새 커밋을 만들게된다. 만약에 아무런 변경 내역을 만들지 않고 실행하게 되면 커밋 메세지만 변경하게 되는 효과를 낼수 있다.
5. 공개된 커밋의 변경 내역을 되돌리기 - git revert
이미 공개된 커밋 내역을 수정하는 행동은 매우 위험하다. 할 수는 있지만 절대로 해서는 안될 행동이다.
하지만 안전하게 변경 내역을 되돌리는 방법이 존재한다. 커밋으로 발생한 변경 내역의 반대 커밋을 하면 된다.
즉 추가한 코드는 빼고, 지운 코드는 다시 추가하는 커밋을 진행하는 것이다.
"git revert 커밋sha-1체크섬값" 명령어를 통해 해당 지점까지 변경 내역을 취소할 수 있다.
6. 이전 작업 결과를 저장한 상태로 되돌리기 - git reset
git reset 명령은 어떤 특정 커밋을 사용하지 않게되어 되돌릴때 사용한다. 앞에서 설명한 git revert 명령이 이전 커밋을 남겨두는 명령이였다면, git reset 명령은 이전 커밋을 남기지 않고 새로운 커밋을 남긴다는 차이가 있다.
또한 git reset 명령은 현재 커밋인 HEAD의 위치, 인덱스, 작업하는 저장소 디렉터리 등도 함께 되돌릴지 선택하기 위한 모드를 지정할 수 있다.
hard - 완전히 되돌림 (Head의 위치, 인덱, 저장소 모두)
mixed - 인덱스의 상태를 되돌림, 모드를 지정하지 않앗을 때의 기본값 (Head 변경, 인덱스 변경, 저장소 변경 X)
soft - 커밋만 되돌린다. (Head 변경, 인덱스 X, 저장소 X)
또한 커밋을 취소하는 데 필요한 옵션도 있다.
^or~ - '~'은 커밋 내역 하나를 의미한다. 표시한 수 만큼 커밋을 되돌리게된다. 하나면 최종 커밋 내역일 것이고 두개면 최종 커밋 내역과 바로 전 커밋 내역이 된다.
ORIG_HEAD - git reset을 실행했을 때 지운 커밋 내역을 보관한다. 해당 명령을 통해 git reset 명령으로 지운 커밋을 되돌릴 수 있다.