
커밋을 되돌리는 방법에는 reset과 revert 두가지 방법이 있다.
그 두가지의 차이점을 알아보자
reset
:
과거 커밋으로돌아가는 동시에 커밋 이력 다 삭제됨 [협업시 권장X]revert
:
시점은 현재, 선택한 과거 커밋을 취소하는 동시에, 현재시점에 취소한 이력이 새로 커밋됨
과거의 한 시점의 커밋을 취소하기때문에충돌이 일어날 수 있다.
git reset [옵션][커밋ID(해시값)]
프로젝트를 특정 커밋(버전) 상태로 되돌림! [그때까지의 커밋과 기록 모두 삭제]
특정 커밋으로 되돌아 갔을 때, 해당 커밋 이후로 쌓았던 커밋들은 전부 사라짐
#RESET의 종류 세가지
--hard : 커밋상태로 돌아가고, 커밋 하지 않은 파일들은 삭제
--soft : 커밋상태로 돌아가고, 커밋 하지 않은 파일들은 staging으로 내리기
--mixed : 커밋상태로 돌아가고, 커밋 하지 않은 파일들은 working으로 내리기
# 예시1
git add a.txt
git commit -m '첫번째 a.txt 커밋'
git add b.txt
git commit -m '두번째 b.txt 커밋'
git add c.txt
git commit -m '세번째 c.txt 커밋'
$ git log --oneline (커밋 내역 출력해보기)
c9ec99d (HEAD -> master) 세번째 c.txt 커밋
da7b371 두번째 b.txt 커밋
01ac4fc 첫번째 a.txt 커밋
#HARD reset과 SOFT reset
$ git reset --hard 01ac4fc << 첫번째 커밋 상태로 돌리기
=> b,c 파일 삭제됨 !, 커밋 이력 삭제됨
$ git reset --soft 01ac4fc
=> b,c 파일 삭제안됨 !, 커밋 이력 삭제됨
git revert [옵션][커밋ID(해시값)]
과거를 없었던 일로 만드는 행위로, 이전 커밋을 취소한다는 새로운 커밋을 생성함
시점은 현재상태에서 과거의 커밋을 수정하는 느낌
• reset은 커밋 내역을 삭제! revert는 새로운 커밋을 생성!
• revert는 Github를 이용해 협업할 때,$커밋 내역의 차이로 인한 충돌 방지 가능
• 문법적 차이
• git reset 3fj758d라고 작성하면 3fj758d라는 커밋으로 되돌린다
• git revert 3fj758d라고 작성하면 3fj758d라는 커밋 한 개를 취소한다
(3fj758d라는 커밋이 취소되었다는 내용의 새로운 커밋을 생성함)
# 커밋 메세지 수정하기
커밋 된 상태에서,
git commit --amend -m '안녕하시렵니까'
# 기존 커밋에 파일 추가하기
파일 생성 후 git add .
git commit --amend -m '입력하세요'
=> 전에 커밋했던 파일과 함께 묶어서 커밋이 됨[커밋내용은 !추가!가 아닌 수정됨]