반응형
Git reset & revert
reset : 과거의 특정 커밋으로 완전히 되돌린다. (변경 내용 없어짐)
revert: 현재에 있으면서, 과거의 특정 커밋들만 없던 일로 만든다. (변경 내용 유지)
Git reset
- git reset 명령어는 현재 브랜치가 예전의 커밋을 가리키도록 이동시켜 변경 내용을 리셋합니다.
- reset은 revert와 달리 애초에 커밋하지 않은 것처럼 예전 커밋으로 브랜치를 옮기는 작업입니다.
추가 설명
git reset - -hard a0fvf8 을 통해 B Commit으로 돌아간다.
C, D Commit은 없어진다.
reset 세부 옵션
git reset --soft [commit ID]
git reset --mixed [commit ID]
git reset --hard [commit ID]
git reset HEAD~10
git reset HEAD^
- soft : commit된 파일들을 staging area로 돌려놓음. (commit 하기 전 상태로)
- mixed(default) : commit된 파일들을 working directory로 돌려놓음. (add 하기 전 상태로)
- hard : commit된 파일들 중 tracked 파일들을 working directory에서 삭제한다. (Untracked 파일은 여전히 Untracked로 남는다.)
- HEAD~N : 현재로부터 원하는 만큼의 커밋이 취소된다.
- HEAD^ : 가장 최근의 커밋이 취소된다.
Git revert
git 을 통해 여러 사람들과 공유 작업을 하는데 reset 명령어를 사용하게 되면 충돌이 발생할 경우가 많습니다.
왜냐하면 각 개인이 같은 브랜치에서 작업하고 있는데 다른 개발자가 특정 커밋을 제거하면 여기서 merge 하게 되면 diff로 인해 충돌이 발생합니다.
그러므로 변경 분을 되돌리면서, 되돌린 내용을 유지하기 위해서는 git revert 명령어를 사용해야 합니다.
위 사진에서 C2 커밋에서 git revert HEAD 를 실행하여 새로운 커밋 C2`가 생성됩니다.
해당 커밋은 C2 내용이 없는 커밋입니다.
추가설명
B Commit으로 이동하기
git revert 51k4er 76sdeb
언제 reset, revert를 사용할까?
협업 프로젝트에서는 가급적 revert를 사용하는 것이 좋다.
reset을 하게 되면 브랜치에서 공유 작업을 할 경우 없어진 commit history에서 충돌이 발생할 수 있다.
참고자료
반응형
'Git' 카테고리의 다른 글
[Git] Git Merge 사용법, 브랜치 Merge 이해 - Squash, Rebase Merge 정리 (1) | 2024.02.25 |
---|---|
[Git] Git branch, switch, merge, rebase 사용하기 (1) | 2024.02.05 |
[Git] Git branch 사용법 및 브랜치 관리하기 - git branch, git checkout (0) | 2023.08.12 |
[Git] git push를 하려 할 때 '[rejected] main -> main (fetch first) error: failed to push some refs to' 에러 해결 방법 (0) | 2023.07.23 |
[Git] 깃허브에 폴더 및 파일 올리기 - git 필수 명령어 정리 (0) | 2023.02.07 |