본문 바로가기
CI&CD/Git

[Git] 브랜치 동기화 이슈 해결하기

by TSpoons 2025. 1. 12.

목적:  main 브랜치와 dev 브랜치를 일치시키려고 함

 

상황 :

main 문에 이미 commit이 이전에 올라가 있고, dev 브랜치는 이를 받으려고 하는데

main commit 내역과 dev commit 내역이 일치하지 않아 문제 발생

 

( main 문에는 바로 올리지 말자..)

6328fbb (HEAD -> dev) Merge branch 'main' into dev
a0c3230 (main) Day 4
2fde97e week 1: merge
0c62db5 (origin/dev) week 1 : example
ed0caaf week 1 : reveiw 1
8bd7692 modify .gitignore for cross platform
4692ee9 week 1 : docs update
b221f6f Day 3
a58795d Day 2
d24ef9d Day 1
b9646fc Initial commit .gitingore

 

 

  • 브랜치 불일치
    • 로컬 dev 브랜치와 원격 dev 브랜치(origin/dev)가 서로 다른 상태
    • main 브랜치와 dev 브랜치가 각각 다른 커밋 히스토리를 보유
  • 커밋 히스토리 차이
    • dev 브랜치에만 존재하는 커밋들:
      • week 1 : example
      • week 1 : review 1
    • main 브랜치의 최신 커밋: Day 4
  • 병합 상태
    • dev 브랜치에 main 브랜치를 병합한 상태이지만, 완전한 동기화가 이루어지지 않음

 

해결 방안

  1. 현재 상태 확인
     
git status

 

 

C:\Users\jaeho\Documents\GitHub\CppBasic>git status
On branch dev
Your branch is ahead of 'origin/dev' by 3 commits.
  (use "git push" to publish your local commits)

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    source/example/manual.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .vscode/
        source/geometry.cpp

no changes added to commit (use "git add" and/or "git commit -a")

 

 

 

2. 브랜치 동기화

git checkout dev
git reset --hard main

 

 

3. 원격 저장소 업데이트

git push -f origin dev
HEAD is now at a0c3230 Day 4

C:\Users\jaeho\Documents\GitHub\CppBasic>git push -f origin dev
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 20 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 2.68 KiB | 2.68 MiB/s, done.
Total 6 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (2/2), completed with 1 local object.
To https://github.com/Shoons23/CppBasic.git
 + 0c62db5...a0c3230 dev -> dev (forced update)

 

 

 

 

이러면 dev와 main branch는 일치하지만,,, dev 브랜치 commit 내역이 전부 삭제

 

 

 

해결 방안 2

 

다시 돌아가서~ 항상 branch 작업 등을 실시할 때는 백업브랜치를 따로 만들어놓자!

1. 먼저 dev 브랜치를 dev-recovered와 동기화:

# dev 브랜치로 이동
git checkout dev

# dev-recovered의 내용으로 강제 업데이트
git reset --hard dev-recovered

# 원격 dev 브랜치 업데이트
git push -f origin dev

 

2. main문에서  Day 4 커밋도 포함

# main의 Day 4 커밋(a0c3230)을 가져오기
git cherry-pick a0c3230

# 원격 저장소 업데이트
git push -f origin dev

 

 

 

 

 

의도했던 대로 원래의 dev 커밋을 유지하면서 성공!