낙서장이자 오답 노트이자 컨닝 페이퍼

Git을 공부해보자: 프로답게 커밋 관리하기(hunk별 관리, stash, 커밋수정, 과거 커밋 관리) 본문

git & github

Git을 공부해보자: 프로답게 커밋 관리하기(hunk별 관리, stash, 커밋수정, 과거 커밋 관리)

NangIn 2023. 11. 29. 08:41
인프런에서 "제대로 파는 Git & GitHub - by 얄코"를 보고 정리한 내용입니다!

hunk별 스테이징

hunk별 스테이징 진행 (변화 하나하나를 hunk라고 부름)

git add -p
  • 옵션 설명을 보려면 ?입력 후 엔터
  • y 또는 n로 각 헝크 선택
  • 일부만 스테이징하고 진행해보기
  • git status로 확인

 

변경사항 확인하고 커밋

git commit -v
  • j, k로 스크롤하며 변경 사항 확인
  • git diff --staged와 비교 (git commit -v는 커밋과 git diff --staged를 같이 하는 것이라고 보면 됨)

커밋 메세지 작성시 변경사항을 볼 수 있다.

 

커밋하기 애매한 변화 stash

stash를 사용하면 현재 진행 중인 변경사항을 다른 공간에 치워둘 수 있다.

 

1. 변경사항 만들기

  • 새 파일은 add 해서 트래킹 해줘야 stash 가능

2. 아래 명령어로 치워두기

git stash

3. 원하는 시점, 브랜치에 다시 적용

git stash pop

4. 원하는 것만 stash

  1. 변경 사항 여러 개 추가
  2. 아래 명령어로 원하는 것을 선택하여 stash
git stash -p

 

5. 메시지와 함께 stash

git stash -m 'Add Stash3'

6. stash 목록 보기

git stash list

  • 리스트상의 번호로 apply, drop, pop 가능
    • ex) git stash apply stash@{1}

7. 새 브랜치에 pop

git stash branch (브랜치명)

stash 사용법 정리

명령어 설명 비고
git stash 현 작업들 치워두기 끝에 save 생략
git stash apply 치워둔 마지막 항목(번호 없을 시) 적용 끝에 번호로 항목 지정 가능
git stash drop 치워둔 마지막 항목(번호 없을 시) 삭제 끝에 번호로 항목 지정 가능
git stash pop 치워둔 마지막 항목(번호 없을 시) 적용 및 삭제 apply + drop
git stash branch (브랜치명) 새 브랜치를 생성하여 pop 충돌사항이 있는 상황 등에 유용
git stash clear 치워둔 모든 항목들 비우기  

 

마지막 커밋 수정

1. 커밋 메시지 변경

git commit --amend

2. 커밋에 변화 추가

  • 변경 사항 추가하고 스테이지
  • git commit --amend로 마지막 커밋에 포함
  • 커밋 메시지 변경

3. 커밋 메시지 한 줄로 변경

git commit --amend -m 'Add members to Panthers and Pumas'

 

과거의 커밋 수정, 삭제, 병합, 분할

과거 커밋 내역을 다양한 방법으로 수정 가능하다 (새로운 브랜치를 만들어 붙이는 방식이기 때문에 rebase 사용).

git rebase -i (대상 바로 이전 커밋)
명령어 설명
p, pick 커밋 그대로 두기
r, reword 커밋 메시지 변경
e, edit 수정을 위해 정지
d, drop 커밋 삭제
s, squash 이전 커미세 합치기

커밋 수정해 보기

개판인 변경할 커밋들...

커밋 메시지 변경

1. 변경할 커밋의 바로 이전 커밋으로 rebase -i

git rebase -i 25b1bb1c318d12456c48174d2eedea6fd

2. 명령어 r을 사용하여 메시지 변경

 

커밋 삭제

1. 삭제할 커밋의 바로 이전 커밋으로 rebase -i

 

2. 명령어 d를 사용하여 삭제

 

3. 커밋 합치기

1. 합칠 커밋의 바로 이전 커밋으로 rebase -i

 

2. 더 최근에 생긴 커밋에 명령어 s 사용

 

3. 커밋 메시지 하나로 합치기(하나만 쓰면 됨)

 

4. 커밋 나누기

1. 나눌 커밋의 바로 이전 커밋으로 rebase -i

 

2. 명령어 e를 사용하여 나누기

 

3. 커밋 한 단계 되돌리기

git reset HEAD^

4. 커밋 나누어 다시 하기

 

5. rebase 완료하기

git rebase --continue