reset --hard 정리
- c2 커밋을 작성한 시점으로 되돌리기
c2 이후에 작성한 모든 내용이 필요 없는 경우 그저 c2 커밋을 작성한 시간으로 되돌리면 된다
먼저, main 이라는 멀티버스의 시간이 c3 에 있기 때문에 이것을 뒤로 돌려줘야 한다.
그리고 그곳에 있는 HEAD 도 같이 c2라는 시간으로 돌아와야 한다.
메인은 커밋을 참조하고, 커밋은 브랜치를 참조한다. 즉, 참조값을 뒤로 돌려주면 된다.
이럴때 git 에서 reset 이라는 수간에 hard 옵션을 줘서 수행할 수 있다.
reset --mixed 정리
- c3 커밋 작성 바로 전으로 돌아가기
이전과 달리 c2 이후에 작성한 내용은 틀리지 않았지만 c3 커밋에서 추가하면 안될 내용이 있는 경우
작성한 내용을 날리면 안 될 것이다. 작성된 내용을 유지하면서 c3 전으로 돌아가기 위해서는 어떻게 해야할까?
이 경우 main 이라는 멀티버스의 시간과 HEAD가 과거로 가는 것과 더불어 1) 과는 다르게 커밋을 하기 전의 상태여야 한다.
워킹 디렉토리 영역에는 이 내용이 작성되어 있어야한다.
또, 커밋으로 추가한 스냅샷 자체에도 수정이 필요하므로 스테이징 에리아는 c3에 추가한 내용이 없어야 좋을 것이다.
이럴땐
git reset --mixed c2
reset 이라는 수단에 mixed 옵션을 사용하여 동작을 실행할 수 있다.
브랜치 라는 흐름에서는 뒤로가지 않았지만, 현재 저장되어 있는 영역을 되돌리는 것으로 c3 커밋 작성 전으로 돌아온 느낌을 주는 것!
그리고 mixed 옵션은 생략이 가능하다. (기본 옵션임)
- mixed
워킹 디렉토리에서 한 일이 사라지진 않지만 스테이징 에리아의 변경으로 인한 위험이있음 - hard
저장하지 않은 모든 내용이 날아갈 수 있다.
revert 정리하기
c3가 올라가서 되돌아갈 수 없는 상황!
이런 상황에서 과거 변경사항으로 고쳐야한다면?
revert 라는 명령어를 사용하면 c3에서 만들어진 변경사항을 없던 c2 상황으로 되돌라고,
revert 했다는 기록을 남길 수 있다. = c3 에 만든 모든 변경 사항을 없애는 새로운 변경 사항을 만드는 것!
reset을 하는 경우 커밋 히스토리가 남지 않고, 직접 워킹 디렉토리 및 스테이징 에리아를 변경하기에 특별한 경우 협업에서 충돌이 많아짐
revert는 되돌린 history를 남겨 그 이유를 남길 수 있고, 협업 시 충돌 최소화 가능
→ 이런 변경이 여기저기 있고 복잡할 때 사용하면 유용하다!
다음 상황에 대한 명령어를 정리해봅시다
(상황1) 팀원이 잘못 reset --hard를 사용하여 작성한 내용을 잃어버렸다고 합니다.
Reflog 확인: 'git reset' 이전의 커밋 해시를 찾아내고, 그것을 사용하여 작업 디렉터리를 복원한다.
'git reflog'를 사용하여 최근 작업 기록을 확인하고, reset 이전의 커밋 해시를 찾아낸 후, 해당 커밋으로 복원한다.
'솝트 33기 안드로이드 > [솝트 33기] Git을 털어보자 깃털 스터디' 카테고리의 다른 글
[GIT] 깃털 스터디 WEEK 2주차 - branch and merge (0) | 2023.10.30 |
---|---|
[GIT] GIT-STUDY 1주차 - Git으로 파일 관리 시작하기 (0) | 2023.10.26 |
[GIT] GIT-STUDY WEEK 0주차 - Git과 Github를 알아보자 (0) | 2023.10.18 |