Overview : Git에서 master 브랜치를 이미 존재하는 다른 브랜치에 덮어쓰는 방법은 여러 가지가 있습니다. 가장 흔히 사용되는 방법은 reset
과 merge
또는 rebase
를 사용하는 것입니다.
1. Reset을 사용하여 브랜치를 Master로 덮어쓰기
이 방법은 매우 강력하며, 현재 브랜치의 히스토리를 완전히 삭제하고 master 브랜치의 히스토리로 교체합니다.
1 2 3 4 5 6 7 8 9 10 |
# 대상 브랜치로 체크아웃 git checkout 대상브랜치 # 강제로 master 브랜치로 reset git reset --hard master # 결과 HEAD is now at 979eef8 Airport 테스트 오류 수정 |
위의 명령어를 사용하면 대상 브랜치는 master 브랜치와 동일한 상태가 됩니다.
2. Merge를 사용하여 브랜치를 Master로 덮어쓰기
이 방법은 현재 브랜치에 master 브랜치를 병합하여 변경 사항을 반영합니다.
1 2 3 4 5 6 7 |
# 대상 브랜치로 체크아웃 git checkout 대상브랜치 # master 브랜치를 대상 브랜치로 병합 git merge master |
3. Rebase를 사용하여 브랜치를 Master로 덮어쓰기
이 방법은 현재 브랜치를 master 브랜치 위로 재정렬합니다.
1 2 3 4 5 6 7 |
# 대상 브랜치로 체크아웃 git checkout 대상브랜치 # master 브랜치를 대상으로 rebase git rebase master |
렇게 하면 대상 브랜치는 master 브랜치의 커밋 위에 놓이게 됩니다.
git pull –rebase origin master
원격 리포지토리의 변경 사항 가져오기: git fetch origin
명령어를 실행하여 원격 리포지토리(origin
)의 master
브랜치에 있는 변경 사항을 로컬 리포지토리에 가져옵니다.
리베이스 수행: 가져온 변경 사항을 현재 체크아웃된 브랜치 위에 리베이스(rebase)합니다. 이는 로컬 브랜치의 커밋들을 원격 브랜치의 최신 커밋들 위에 재배치(replay)합니다.
1 2 3 4 5 |
A---B---C (origin/master) \ D---E---F (current-branch) |
git pull --rebase origin master
를 실행하면 다음과 같은 결과
1 2 3 4 5 |
A---B---C (origin/master) \ D'---E'---F' (current-branch) |
여기서 D'
, E'
, F'
는 리베이스된 커밋들입니다. 이는 로컬 변경 사항이 원격 저장소의 최신 변경 사항 뒤에 오도록 하여, 더 깔끔한 커밋 히스토리를 유지하게 합니다.
올바른 사용법
1 2 3 4 |
git pull --rebase origin master # 로컬 브랜치 위에 원격 master 브랜치 리베이스 git push origin master --force # 변경된 히스토리를 원격 브랜치에 강제로 푸시 |
주의사항
git reset --hard
명령어는 로컬 변경 사항을 모두 삭제하므로 주의해서 사용해야 합니다.- 병합 또는 재배치를 사용할 때 충돌이 발생할 수 있으며, 이를 수동으로 해결해야 할 수 있습니다.
- 작업을 시작하기 전에 중요한 변경 사항이 있다면 백업을 하거나 별도의 브랜치에 커밋해두는 것이 좋습니다.
이 중에서 어떤 방법을 사용할지는 상황에 따라 다를 수 있습니다. 브랜치 히스토리를 완전히 대체하고자 한다면 reset --hard
를, 히스토리를 보존하면서 병합하고 싶다면 merge
또는 rebase
를 사용하면 됩니다.