[git] 브랜치가 여러개일때 reset 사용법과 결과

Benjamin·2023년 5월 25일
0

git

목록 보기
3/4

여러 브랜치가 있을 때 reset의 사용에 대해 공부하다가 예상했던 결과와 다른게 있어서 이를 기억하고 공부하기위해 정리한다.

우선 reset에 대해 간단하게 알아보자.

reset

예를 들어 reset A를 하면, 이 명령은 A커밋을 리셋하는것이 아니라, 최근 커밋을 A로 리셋하는 것이다.

즉 A커밋을 삭제하는것이 아니라, A 커밋 이후에 만들었던 커밋을 삭제하고 A커밋으로 이동하는것이다.

이 reset을 여러 브랜치로 나누어서 작업하는 상황에 특정 브랜치에서 다른 브랜치로 reset하면 어떻게되는지 궁금했다.

여러 브랜치에서 reset 사용하기

상황은 아래와 같다.
1. master브랜치에서 c1.txt파일을 만들고 '1'이라는 내용을 커밋메시지 'c1'으로 커밋한다.
2. sub브랜치를 생성한다.
3. master브랜치에서 c2.txt파일을 만들고 '2'이라는 내용을 커밋 메시지 'c2'로 커밋한다.
4. sub브랜치로 가서 s1.txt파일을 만들고 's1'이라는 내용을 커밋 메시지 's1'으로 커밋한다.

위처럼 작업하고나서 git log를 그래프로 확인해보면 아래와같다.

이 상황에서 master브랜치에서 작업했던 c2로 reset하면 어떻게될지 궁금했다.

git reset 04aa8d3 을 명령하면 아래와같은 결과가 뜬다. // 04aa8d3은 c2의 해시값이다.

이때부터 엥?싶었다.
c2.txt가 D라고? (삭제됐다는거 아닌가?)

git log --oneline --branches --graph로 커밋로그를 확인해보니, 아래처럼 s1이 사라지고 c2로 잘 돌아간것을 볼 수있는데..

git status로 현재 상태를 확인해보니 c2.txt가 삭제되었고, s1.txt가 추적되지 않는 상태인가보다.

s1의 커밋이 사라졌으니 s1커밋때 작성한 s1.txt파일이 삭제되고, c2커밋으로 reset했으니 c2커밋때 생성한 c2.txt는 생성되어야하는게 아닌가..??
이 부분이 혼란스러웠다.

sub브랜치에서 파일을 확인해보니 c2.txt는 없고, s1.txt는 그대로 있는 상태였다.. 띠용??

그리고 s1.txt의 내용도 's1'그대로이고, c2.txt의 내용도 '2'그대로였다.

이상하지만 버전관리가 되지않았다니, git add . git commit -m "reset c2 를 진행하니 역시 c2.txt가 삭제되고, s1.txt가 생성되었단다.. (위의 결과에서 진행하니 당연한 이야기지만)

master 브랜치의 파일을 확인해보니 이쪽은 c1과 c2가 원래 내용을 유지한채 그대로 잘 있다.

뭐지?!!??!

0개의 댓글