Git & GitHub 공부 - Day2

surra77·2024년 1월 24일
0

Reset & Revert

Reset

  • 원하는 시점의 커밋으로 이동
  • 이동한 커밋을 기준으로 이후의 모든 커밋 이력을 삭제

사용법

git reset --hard [돌아가길 원하는 커밋 해시값]

reset hard, soft

reset --hard를 하면 이전 커밋으로 되돌린 후 이후 커밋 이력을 모두 삭제
reset --soft는 커밋 이력이 지워지지 않고 stage에 올라가 있어 언제든지 다시 commit을 진행 할 수 있는 상태가 됨

reset은 혼자서 하는 프로젝트에서만 사용하고 되도록 revert를 사용하는게 좋음!

revert

  • 원하는 시점의 커밋된 내용만 되돌림
  • 되돌린 내용에 대해 새로운 커밋을 생성

사용법

git revert [되돌리길 원하는 커밋 해시값]

revert 사용 시 별도 옵션을 사용하지 않았다면 자동으로 되돌린 지점의 commit 메시지가 커밋 메시지로 들어감

revert했을 때 터미널에 vim 모드가 떴을 경우 콜론(:) 누른 후 wq를 입력해 나오면 됨


Branch

브랜치는 여러 개발자가 동시에 작업을 진행 할 때 독립적으로 어떤 작업을 할 수 있게 해주는 것
브랜치를 이용하면 각자 독립적인 공간에서 소스코드를 변경할 수 있고 이렇게 분리된 작업 영역에서 변경된 내용들을 나중에 원래의 버전과 비교해 다시 하나의 버전을 만들어 낼 수도 있음
또한 branch로 작업하면서 기록을 남기므로 나중에 합쳤을 때도 어디서 문제가 발생했는지 쉽게 알 수 있음

브랜치 생성 / 이동 / 삭제하기 / 이름 바꾸기

# 브랜치 생성
git branch [브랜치 명]) git branch oz

# 브랜치 목록 확인
git branch

# 생성한 Branch로 이동
git switch [브랜치 명]) git switch oz

# 브랜치 생성과 동시에 이동하기
git switch -c oz

# 브랜치 삭제하기
git branch -d (삭제할 브랜치명)) git branch -d oz

# 브랜치 이름 바꾸기
git branch -m (기본 브랜치명) (새 브랜치명)) git branch -m oz oz_new

주의할 점!!!
branch를 생성하면 생성한 브랜치의 모든 내용을 복사하므로 내가 어떤 브랜치에 있고 어떤 브랜치로 가서 생성을 해야되는지 잘 생각해야 함
예를 들어, main에 기능을 추가해야 되면 main으로 가서 branch를 생성해야 함

실습

  • branch 생성 후, 각각 commit을 했을 때 log
    Head -> 가 가리키는게 현재 내가 있는 branch

  • 소스트리로 봤을 때


merge & rebase

생성한 브랜치의 내용을 합치는 방법은 merge와 rebase 두 가지가 있는데 merge는 머지한 것과 이전 커밋 내역들이 모두 남지만 rebase는 커밋 내역이 남지 않음

merge

  • branch의 이력을 유지한체 main branch에 합치는 기능
  • 주로 협업시 merge 사용

사용법

git merge [합치고 싶은 branch 명]

주의!! merge 전에 main branch로 이동 후 merge를 해야함!

rebase

  • branch의 이력을 main branch와 연결지어 하나의 이력으로 만듦
  • 기존 branch의 이력이 사라지므로 깨끗한 이력을 관리하기 용이함
  • 단, 하나의 이력으로 만드는 과정에서 모든 커밋이 재정렬되고 그 과정에서 기존 해시값들이 전부 바뀌므로 충돌 등의 다양한 문제가 발생 할 수 있음

사용법

Rebase는 merge와는 다르게 합치고 싶은 브랜치에서 Rebase를 진행 후 main에서 merge를 진행해야 함

#합치려는 branch로 이동하는 명령어
git switch [이동을 원하는 branch]

#합치려는 branch의 커밋 이력을 합칠때 사용하는 명령어
git rebase main

#main branch로 이동
git switch main

#main에서 main branch와 합치고자하는 branch를 merge 진행
git merge [합치고자하는 branch명]

실습

main과 add-coach merge하기

  • main으로 이동한 후 add-coach를 merge

  • 소스트리로 봤을 때

merge는 reset으로 되돌리기 가능

  • merge도 하나의 커밋
  • reset을 하면 merge 하기 전 해당 브랜치의 마지막 시점으로 이동

main과 new-teams rebase하기

  • new-teams로 이동 후 main에 rebase 한다고 알려줌
    이때 충돌이 일어나는지 체크
git switch new-teams
git rebase main
  • 충돌이 없으면 다시 main으로 돌아가서 다시 merge 해주면 됨
git switch main
git merge new-teams
  • 성공적으로 rebase가 된 경우
  • 소스트리로 봤을 때

    new-teams의 커밋이력이 마치 원래 main의 이력이였던것 처럼 하나로 합쳐짐

profile
개발자 준비생

0개의 댓글