존재 Branch에 덮어쓰는 방법

Overview : Git에서 master 브랜치를 이미 존재하는 다른 브랜치에 덮어쓰는 방법은 여러 가지가 있습니다. 가장 흔히 사용되는 방법은 resetmerge 또는 rebase를 사용하는 것입니다.

1. Reset을 사용하여 브랜치를 Master로 덮어쓰기

이 방법은 매우 강력하며, 현재 브랜치의 히스토리를 완전히 삭제하고 master 브랜치의 히스토리로 교체합니다.

위의 명령어를 사용하면 대상 브랜치는 master 브랜치와 동일한 상태가 됩니다.

2. Merge를 사용하여 브랜치를 Master로 덮어쓰기

이 방법은 현재 브랜치에 master 브랜치를 병합하여 변경 사항을 반영합니다.

3. Rebase를 사용하여 브랜치를 Master로 덮어쓰기

이 방법은 현재 브랜치를 master 브랜치 위로 재정렬합니다.

렇게 하면 대상 브랜치는 master 브랜치의 커밋 위에 놓이게 됩니다.

git pull –rebase origin master

원격 리포지토리의 변경 사항 가져오기: git fetch origin 명령어를 실행하여 원격 리포지토리(origin)의 master 브랜치에 있는 변경 사항을 로컬 리포지토리에 가져옵니다.

리베이스 수행: 가져온 변경 사항을 현재 체크아웃된 브랜치 위에 리베이스(rebase)합니다. 이는 로컬 브랜치의 커밋들을 원격 브랜치의 최신 커밋들 위에 재배치(replay)합니다.

git pull --rebase origin master를 실행하면 다음과 같은 결과

여기서 D', E', F'는 리베이스된 커밋들입니다. 이는 로컬 변경 사항이 원격 저장소의 최신 변경 사항 뒤에 오도록 하여, 더 깔끔한 커밋 히스토리를 유지하게 합니다.

올바른 사용법

주의사항

  • git reset --hard 명령어는 로컬 변경 사항을 모두 삭제하므로 주의해서 사용해야 합니다.
  • 병합 또는 재배치를 사용할 때 충돌이 발생할 수 있으며, 이를 수동으로 해결해야 할 수 있습니다.
  • 작업을 시작하기 전에 중요한 변경 사항이 있다면 백업을 하거나 별도의 브랜치에 커밋해두는 것이 좋습니다.

이 중에서 어떤 방법을 사용할지는 상황에 따라 다를 수 있습니다. 브랜치 히스토리를 완전히 대체하고자 한다면 reset --hard를, 히스토리를 보존하면서 병합하고 싶다면 merge 또는 rebase를 사용하면 됩니다.