인텔리제이에서 버튼 하나 누르면 수행하는 git 명령어들을 history를 확인하고 필수적인 git 명령어 위주로 정리했다. 버튼 누를땐 누르더라도 어떤 명령이 수행하는지 알기 위한 목적으로 작성했다.
인텔리제이 Gerrit 플러그인에서 지원하는 git 명령어
- git show
git show <commit_hash>
git show 명령어는 인자로 커밋의 해시값을 입력하면 해당 커밋에 대한 정보와 변경 사항을 출력해준다.
보여주는 정보는 아래와 같다.
1. 커밋 정보(해시값, 작성자, 작성일 등)
2. 커밋 메시지
3. 변경된 파일 목록
4. 파일 내용의 추가/삭제/변경
- git diff
git diff # 현재 작업 디렉토리와 스테이지의 차이를 보여줌
git diff file1 # 특정 파일의 변경 내용을 보여줌
git diff commit1 commit2 # 두 커밋 간의 차이를 보여줌
- git fetch
git fetch <remote> <branch>
git fetch origin main # origin 원격 저장소에서 main 브랜치의 변경내용을 가져옴.
가져온 내용은 로컬 저장소 내의 fetch_head라는 참조에 저장됨. 로컬 브랜치에 바로 반영하지 않고 원격 저장소의 커밋을 가져올때 쓰이기 때문에 이후에 추가 명령어로 로컬브랜치에 반영을 해줘야함.
- FETCH_HEAD : 원격 저장소에서 가져온 최신 커밋을 가리키는 참조. 가져온 커밋 중 가장 최신 커밋을 가리킴.
git merge FETCH_HEAD # FETCH_HEAD에 있는 커밋을 현재 브랜치에 머지
git cherry-pick FETCH_HEAD # FETCH_HEAD에 있는 커밋을 현재 브랜치에 체리픽
git reset --hard FETCH_HEAD # 작업 디렉토리를 FETCH_HEAD의 상태로 강제로 리셋
이후에 커밋 히스토리를 정리하기 위해서 git rebase 명령을 수행할 수 있음.
git rebase 동작예시
git rebase origin/develop 명령 수행시
D 커밋에서 분기된 로컬 브랜치는 이후 E,F,G 커밋이 반영이되어있음. 분기된 이후에 리모트 브랜치에 반영된 B,C 커밋이 존재하는 상태
이때 rebase를 하면 리모트 브랜치에 반영되어있던 커밋을 내 로컬 반영 커밋에 이전 커밋처럼 만들어줌. 당연히 이로 인해 충돌이 발생할 수 있고 해결해주어야함. E, F, G는 이제 B, C가 먼저 반영된 것 처럼 충돌처리가 끝난 상태로써 도식에서는 E', F', G'로 표현.
rebase 동작을 도식화해보고 나니 문서 에디터에서 충돌처리하는 방식과 유사했다. git에서는 rebase를 통해 커밋 graph를 깔끔하게 정리할 수 있음을 이해했다. 다음번에는 Pull Request, Merge Requet등 gerrit 사용자들이 잘 모르는 커밋 반영방식을 알아보면 좋을 것 같다.
'블로그 > 개발일지 (TIL)' 카테고리의 다른 글
[Spring] 요청 파라미터에서 값 가져오는 4가지 방법소개 (0) | 2024.10.16 |
---|---|
간단한 레디스 명령어 정리 (GET, SET, 대표 자료형), CAP 이론, 레디스 책 추천 (0) | 2023.08.18 |
인텔리제이 git rebase 기능, 웹에서 git 연습하기, redis sentinel, cluster (0) | 2023.08.17 |
스프링 공식 튜토리얼로 실습방법, 인텔리제이 단축키 3가지 소개, lombok 설정, 타임리프, Gradle 스프링 플러그인, bootRun (2) | 2023.04.26 |
스프링 RequestMapping, 컨텍스트 호출, 배포서술자, WEB-INF (0) | 2023.03.16 |
최근댓글