지정된 커밋 이후의 모든 커밋을 다 삭제하는 reset과 지정된 커밋이 왜 삭제 되었는지 커밋을 남기는 revert.
revert는 지정된 커밋만 삭제하고, 해당 커밋이 왜 revert 된 건지 commit message를 통해 관찰할 수 있기 때문에 더 유용하다
-> reset
# 다른 사람과의 코드 공유가 없을 때 # origin에 올리지 않고 로컬에 커밋이 머물렀다거나 올라갔어도 나만 해당 브런치를 사용할 때 Usage : git reset --option <돌아갈 커밋 순번 or 커밋 해시>
# 바로 이전 commit으로 돌아가기 git reset HEAD^
# 여러 개의 commit 이전으로 돌리는 경우 # 현재 커밋부터 첫 번째로 하여 3번째에 해당하는 커밋으로 되돌아갈 때 git reset HEAD~2
# --hard 옵션 # 지정된 n번 커밋으로 되돌아가는데, n번을 기준으로 이후 커밋들은 모두 삭제 git reset --hard <n번 commit hash> git push
# --soft 옵션 # 변경 이력은 모두 삭제되지만, stage 상태로 변경된 코드 내용이 남아있기 때문에 # add 명령어 필요없이 바로 commit 진행이 가능하다 git reset --soft <n번 commit hash> git commit -m "<커밋할 내용>" git push
# --mixed 옵션 # 변경 이력은 모두 삭제되지만, unstage 상태로 변경된 코드 내용응 남아있다. # 코드를 반영하려면 add 명령어로 stage에 반영하고 commit 해야 함 git reset --mixed <n번 commit hash> git add . git commit -m "<커밋할 내용>" git push
# --force # 로컬은 origin에 있는 commit을 삭제한 채로 origin에 덮으려고 하기에 에러가 뜨므로 # --force 옵션을 주어 강제로 로컬 commit history를 origin commit history로 덮어쓴다. # 이는 다른 사람과 해당 레포지토리를 공유하여 작업한다면 하면 안된다.
-> revert
# 다른 사람과의 코드 공유가 있을 때 # 커밋을 삭제하는 reset과는 다르게 커밋을 추가한다. # 이전 커밋과 정반대의 데이터를 추가하는 방식으로 코드를 되돌린다. # reset --soft, mixed와 동일한 결과를 가져오지만 이력은 Revert "..."라는 메시지가 추가된다.
# 아래의 명령을 사용하면 n번 커밋 이후의 커밋들이 삭제되지 않고, n번 커밋에 해당하는 내용만 삭제되고 # revert "n번 커밋"이라는 커밋에는 n번 커밋이 삭제된 이력이 남게 된다. git revert <n번 commit hash>
# --no-commit 옵션 # revert한 결과를 stage 상태만 유지하고, commit 하고 싶지 않을 때 1. git revert --no-commit <n번 커밋 해시> 2. git commit -m "<commit을 revert한 이유>" 3. git push
# 여러 개의 커밋을 되돌릴 때 git revert [n번 커밋 해시]..[n번 커밋 해시] ex) git revert [1번 커밋 해시]..[2번 커밋 해시]