복합 리셋(mixed reset) 에 대해 알아보자.
하드 리셋(hard reset) 은 지정한 곳 이후에 일어난 commit 들은 아예 다 지우고 이전 상태로 돌아간다.
전에 봤듯이 hard reset을 진행했을 때에는 chapter_two.txt 파일이 아예 삭제되었었다.
다시 chapter_two.txt 파일을 하나 만들어주고 commit 해준 후, 이번에는 mixed reset 을 실행해보자.
현재 add chapter two 라는 commit 과 함께 chapter_two.txt 파일을 추가해준 상태이다.
terminal 에 git reset HEAD^ 를 입력하면
commit 한 chapter_two.txt 파일이 삭제되지는 않고 파일 옆에 U 표시로 Untracked 상태가 되어있는 것을 확인할 수 있다!
HEAD도 그 밑의 commit을 가리키고 있는 것을 볼 수 있다.
mixed reset 은 내가 지정한 곳 이후 일어난 commit 즉, 변경사항들을 다시 unstage 영역으로 옮긴다.
아직 완료되지 않은 파일을 commit 하는 실수를 한 경우, mixed reset 을 사용하면 된다.
chapter_two.txt 파일의 내용을 조금 바꾼 뒤 다시 commit 을 진행해주자.
이제 문제가 있다. 원격 저장소의 최종상태와 컴퓨터의 최종상태가 다르다!!
terminal 에 git remote -v 를 입력하고
아래 링크를 클릭하면 Github 즉 원격 저장소의 코드를 확인해 볼 수 있다.
문제를 해결하기 위해 terminal에 git push origin main --force 대신 git pull origin main 을 입력해보자.
그럼 위와 같이 conflict가 생기는 것을 확인할 수 있다.
우리는 다시 변경한 내용으로 파일을 변경하고 싶다. 위에 Accept Current Change를 눌러준 뒤, 다시 한번 commit 을 진행해보자.
그 후 terminal에 git push origin main 을 쳐주면 원격 저장소에도 변경된 사항이 반영되는 것을 확인할 수 있다!! (대부분의 경우는 위 방법 대신 그냥 git push origin main --force 방법을 사용하긴 한다.)
소프트 리셋(soft reset) 은 mixed reset 과 작은 차이점이 있다.
soft reset 은 mixed reset 과 달리 내가 지정한 곳 이후 일어난 commit 즉, 변경사항들을 stage 영역에 추가한다.(그냥 mixed reset 후 git add 를 진행하면 같은 결과가 나온다.)
대부분의 경우 hard reset 혹은 mixed reset 을 사용한다!!!
'Git&Github' 카테고리의 다른 글
Amending Commits & Ignoring files 란? (0) | 2022.09.18 |
---|---|
과거 Commit에서부터 Branch를 만드는 법 (0) | 2022.09.17 |
Checkout & HardReset 이란? (0) | 2022.09.11 |
CLI log & Commit & Push 란? (0) | 2022.09.07 |
Origin & Upstream & Issues 란? (0) | 2022.09.05 |