1. reset, revert, merge, rebase, HEAD

:D ·2023년 5월 15일
0
post-thumbnail

한 1년전에 깃허브 강의를 들었는데, 쓰던 명령어만 쓰다보니 다른 기능들이 잊혀졌다..
이번에 디프만에서 하는 프로젝트를 하기전에 한 번 더 공부해서 꼬이는 일이 없도록 하기 위함, 앞으로는 다시 이 강의를 안 듣도록 정리하는 마음에서 작성해보았다.!

1. reset vs revert

reset와 revert의 차이점은 revert는 과거로 돌아가는 이력을 남기는 것이고, reset은 아예 없었던 것 처럼 과거로 돌아가는 것이다.

reset처럼 과거로 돌아가면 될텐데 언제 revert를 쓸까?

  • 과거로 돌아가는 것도 이력으로 남기고 싶을 때
  • 만약 a,b,c 커밋중에서 c 커밋만 취소하고 싶을 때
  • 이미 공유공간에 올라간 내역을 되돌리고 싶을 때 (이미 공유공간에 올라간 내역을 reset 하면 협업시 문제가 발생한다. 과거를 되돌리기 전에 기반으로 코드 작업을 한 다른 사용자와 충돌이 발생할 수 있기 때문이다.)

2. merge vs rebase

merge는 두 브랜치를 한 커밋에 이어붙이는 것이고,rebase는 브랜치를 다른 브랜치에 이어붙이는 것이다.

이렇게 브랜치를 합칠 때 merge, rebase를 쓰지만 pull할 때도 쓰인다.
아래처럼 pull 할 것이 있는데 push를 하면 이러한 에러가 뜬다.

  • git pull --no-rebase - merge 방식
  • git pull --rebase - rebase 방식

앞에서 설명한 것처럼 merge 방식으로 하면 두 브랜치를 한 커밋에 이어붙이고, rebase는 브랜치를 다른 브랜치에 이어붙이는 것처럼 보이는 것을 확인할 수 있다.

3. HEAD

HEAD는 현재 속한 브랜치의 가장 최신 커밋이다.
git checkout HEAD^ 이렇게 ^ 또는 ~: 갯수만큼 이전으로 이동할 수 있다.
HEAD를 이동시키면 익명의 브랜치에 위치함을 알 수 있다. 밑에 사진처럼 main 처럼 브랜치 명이 적혀있어야하는 곳에 익명의 브랜치가 적혀있다.
저렇게 해시값으로 브랜치명이 변경될 때가 있었는데 왜 그런지 몰랐었다 !!

다음글엔 pull vs fetch, ff-merge, 3-way-merge, squash and merge, rebase and merge 등에 대해서 작성해보려고 한다.

references

profile
강지영입니...🐿️

0개의 댓글