❓ Information
- git 에서 유용한 changes.patch 기능 발견
🔰 Content ->
문제 상황
a, b(나), c 사용자가 같은 프로젝트에서 git 작업중.
로컬 main branch 깃 로그 상황:
a: commit1
b: commit2
c: commit3
b: commit4
a: commit5
c: commit6
a: commit7
b: commit8
원격 main branch 상황:
a: commit1
c: commit3
a: commit5
c: commit6
a: commit7
rebase해서 아래와 같이 수정하려고 함:
a: commit1
c: commit3
a: commit5
c: commit6
a: commit7
b: commit8
아직 푸시하지 않은 로컬 커밋을 삭제(rebase), 이 상태로 강제 푸시(—force) 하면 충돌 안남
해결 방안:
rebase + force push
일단 git branch 확인
git rebase -i HEAD~8
에디터에서 지우고 싶은 커밋을 지운다 (물론 원격에 없는것만)
pick <hash1> commit1
pick <hash2> commit2 <----지워
pick <hash3> commit3
pick <hash4> commit4 <----지워
pick <hash5> commit5
pick <hash6> commit6
pick <hash7> commit7
pick <hash8> commit8
git log —oneline 해서 로컬에 로그가 잘 정리 되었나 확인
git push —force (히스토리를 변경 했기에 강제 푸시로 해야함)(내 히스토리로 원격을 덮어쓰는 것이기 때문)
충돌이 안나는 이유: 푸시하지 않은 로컬 커밋만 수정하거나 삭제했기 때문
패치를 활용
git switch main
git diff origin/main > changes.patch
git reset --hard origin/main
git apply changes.patch
git add .
git commit -m "b: 모든 작업을 하나의 커밋으로 정리"
git push origin main