본문 바로가기
Tool

[Git]04 - amend / cherry-pick / reset / revert / stash

by SOLYI 2022. 11. 1.

챕터 안내

Ch05. 실무 사례와 함께 Git 다루기

  • 실습을 위한 사전 준비: 새로운 원격저장소 만들기
  • amend: 수정 못한 파일이 있어요, 방금 만든 커밋에 추가하고 싶어요
  • cherry-pick : 저 커밋하나만 떼서 지금 브랜치에 붙이고 싶어요
  • reset : 옛날 커밋으로 브랜치를 되돌리고 싶어요
  • revert : 이 커밋의 변경사항을 되돌리고 싶어요
  • stash : 변경사항을 다른곳에 저장하고 싶어요, 커밋은 안만들래요

개념 정리

amend: 수정 못한 파일이 있어요, 방금 만든 커밋에 추가하고 싶어요

마지막 커밋을 수정amend한다는 의미

: 내가 지금 스테이지에 올린 변경사항이 기존 커밋에 추가 되면서 기존 커밋이 덮어 씌워진다.

  • 현재 커밋을 수정하고 싶은 경우
  • 커밋 메세지를 바꾸고 싶은 경우
  • 이전 커밋 파일 내용을 조금 수정하고 싶은 경우
  • 깜빡해서 이전 커밋에 일부 중요한 파일을 추가하지 않은 경우
// 커밋 메세지 수정
git commit --amend - m "변경할 커밋 메세지"

// 커밋에 변경 내용 수정하기
git add . // stage 에 추가
git commit --amend // 마지막 커밋 수정
git log -nl -oneline --stat // 마지막 커밋 정보 보기

!!! origin/master 와 master의 커밋이 서로 달라져 충돌이 일어나므로 git push --force 명령어를 사용해야한다. --force는 가급적 사용하지 않는편이 좋다.

!!! 가장 최근 커밋만 수정이 가능하다. 오래된 커밋은 수정할 수 없다.

cherry-pick: 저 커밋 하나만 떼서 지금 브랜치에 붙이고 싶어요.

: 다른 브랜치의 커밋을 내 브랜치에 반영하기

//다른 브랜치의 특정 커밋을 현 브랜치에 반영하기
git cherry-pick <commit hash> 
//3개 커밋 병합
git cherry-pick 333sdf 3f23as 1f15asd  
//첫번째 커밋과 마지막 커밋 사이의 모드 커밋들을 현재 브랜치에 반영
git cherry-pick 333sdf..1f15asd 

//merge-commit에 대해 체리픽
git cherry-pick -m 1 {머지커밋해시}
//충돌이 났을때 수정후 
git add {충돌 파일} 
git cherry-pick --continue 
//cherry-pick 중단하고 이전 상태로 돌아가기
git cherry-pick --abort

!!! chrry-pick은 최후의 수단으로 사용할것. 남용할 경우 커밋 이력 해독이 불가능해질 수 있다.

reset: 옛날 커밋으로 브랜치를 되돌리고 싶어요

  • Soft, Mixed, Hard 모드 중에서 선택해야한다.
  • Hard : 깔끔한 리셋
  • Soft, Mixed 는 원하는 커밋으로 이력을 되돌리긴 하지만, 이다음에 추가했던 변경사항을 작업공간으로 뽑아준다.
  • Mixed : 변경사항을 스테이지 아래로 둬서 다시 무엇을 스테이지 위로 add할지 고민할 수 있다.
  • Soft : 변경사항을 스테이지 위로 둬서 다시 당장 커밋할 수 있다.
git reset --soft Head~
//바로 이전 상황으로 돌리기
git reset HEAD^

//여러 커밋 이전으로 돌리기
git reset HEAD~2
  • anti-commit 방법
    • 내 이후의 커밋된 내역을 가져와서 커밋하는것
  • 깨끗하게 리셋
  • revert는 이력을 남긴다.

revert: 이 커밋의 변경사항을 되돌리고 싶어요.

  • 이력관리가 중요한 브랜치라면 아예 없던일로 만드는것보다 변경사항을 되돌리는 새로운 커밋을 만드는 것이 더 좋다. 이를 위한 명령어는 revert(되돌리기)
// 여러개의 커밋을 한 뒤 돌리고 싶을 때
git revert [1번커밋 hash]

// revert 결과를 stage 상태만 유지하고 commit 하지 않을때
git revert --no-commit [커밋해쉬]

//여러개의 커밋 되돌리기
git revert 해쉬..해쉬

stash: 변경사항을 잠시 다른곳에 저장하고 싶어요, 커밋은 안만들래요

급히 다른 브랜치에서 작업을 해야하는데 현재 브랜치에서 커밋하지 않은 변경사항이 있지만 아직 커밋하기에는 애매한 파일들이 있을때, 잠깐 서랍속에 넣어두었다가 다시 꺼내 쓰는 방법이 stash (넣어두다)

git stash
git stash apply
git stash pop
git stash list
git stash drop
  • pseudo-commit 슈도커밋? 이라고도함.
  • 새로 작성한 파일은 stash 가 되지 않음.
반응형