Git 심화

브랜치를 merge 하는 다양한 심화방법이 있다.


Fast-forword

커밋이 공통이고 대상 브랜치의 커밋만 증가한 경우, HEAD 만 옮겨지는 상황
쉽게말해 main 에서 떨어져나온 f 브랜치에서 커밋을 생성한 후에 main에 merge 시키는것이 아니라,
f 브랜치를 main으로 변경시켜(HEAD를 main->f로 바로 이동) 별도의 merge없이 바로 수정내역이 추가되는것을 fast-foword 방식이라 한다.


3-way merge

협업시 가장 많이 이뤄지는 merge 방식
main 브랜치와 수정하려는 f 브랜치, main에서 새로운내용을 추가한 hotfix 브랜치가 있을때, hotfix는 이미 main에서 변경점이 생겼기 때문에 f 에서 hotfix로 바로 merge 할 수 없다. 이때 main,f,hotfix 간의 차이를 커밋으로 만들고 merge라는 새로운 커밋을 생성한다. 3way라는것은 이렇게 세개의 다른점을 커밋으로 저장한다는 의미다.
이후 이 merge라는 커밋에 main을 옮김으로써 병합이 완료된다.


rebase

기준이되는 브랜치의 커밋을 base 라고 한다.
rebase를 사용하여 merge 시점기준 브랜치의 가장 최신 커밋시점으로 base를 변경시키면, fast-foword 방식으로 별도의 커밋을 남기지 않고 병합시킬 수 있다.
(여러개의 중간의 중복되는 커밋을 하나로 압축하는 느낌이다.)

rebase 사용 시 -i 옵션을 주면 대화형 모드로 가독성 좋게 사용할 수 있다.
'git rebase -i main'

-p,pick : 해당 커밋을 수정하지 않고 그냥 사용(두개의 커밋이 있을때 둘다 pick 하면 두 커밋 그대로 rebase 됨)
-r,reword : 커밋메세지 수정
-e,edit : 커밋메세지와 작업내용을 수정할 수 있음(중간에 커밋추가도 가능)
-s,squash : 커밋여러개를 한개로 합치는 옵션으로 특별히 분기로 나눠야하는 커밋이 아니라면 히스토리를 간결하게 만듬
-f,fixup: 스쿼시와 같지만 fixup은 기준이되는 이전커밋메세지만 남기는 차이가 있고, 나머지 커밋메세지는 무시

브레이크 과정에서 rebase를 중단해야될경우?
--abort : rebase 중단
--continue : break 지점에서 다시 rebase 진행
--skip : 해당 커밋지점의 break상황을 건너뜀

stash

modified 상태의 작업을 임시 저장하는 명령어
브랜치에서 작업도중 다른 브랜치로 변경해야 할때, 커밋을 원하지않는경우 사용한다. (LIFO 로 작동 like stack)
stash,pop을 많이 사용한다.

stash (save) : 임시저장 (save 생략가능)
stash pop : 가장 최근 stash 사항을 적용하고 stash list에서 삭제
stash -p : 선택해서 stash
stash -m : 커밋처럼 메세지 남기기
stash list : 목록확인
stash apply : 가장 최근것을 적용하거나, 특성 순서를 지목해 적용
stash drop : 이름대로 삭제 (특정 순서를 지목해 삭제 가능)
stash clear : 누적된 stash를 전부 삭제

log

커밋 히스토리를 보여주는 명령어

log -p : 각 커밋마다 변경사항 같이보기
log -(갯수) : 원하는 n개의 커밋 보기
log --stat : 통계도 같이 보기
log --oneline : 한줄로 간략히 보기
log --oneline --graph : 그래프로 로그보기
log -S "검색어" : 변경사항 내 검색어 찾기
log -grep "검색어" : 커밋메세지내 검색어 찾기

reflog

그동안의 모든 작업내역을 확인하는 명령어
rebase, reset --hard 를 사용하면 변경내용을 되돌아갈 수 없어서 위험하지만 reflog는 작업내용을 확인할 수 있다.
원하는 시점의 커밋 넘버를 복사할 수 있고, git reset --hard"커밋넘버" 로 되돌릴 수 있다.


blame

어떤코드를 누가 작성했는지 알 수 있는 명령어

git blame 파일명 : 해당파일의 코드내역 확인
blame -L 원하는시작라인넘버,끝 '파일명' : 파일의 특정 코드라인을 확인

추가로 git summary, git lens 플러그인으로 변경내역을 자세히 볼 수 있다.

'백엔드 > Git, Github' 카테고리의 다른 글

[Github] 기초개념  (0) 2022.09.23
[Git] 기초와 명령어  (0) 2022.09.22

+ Recent posts