· oss

오픈소스 기여를 위한 Commit 정리

의미 없는 `.` 커밋이 원격까지 올라간 상태에서 기여용 PR을 내기 위해, interactive rebase로 커밋을 squash하고 amend로 메시지를 다듬어 이력을 정리한 기록.

작성날짜: 25.05.18

현상황

  • 오픈소스 기여를 위한 다수의 의미없는 . 커밋 메시지가 원격 저장소까지 push된 상태

해결

1. Git Rebase 사용

image

1-1. 현재 상태 확인
git log --oneline

// 결과
abc1234 Fix typo in README
def5678 Add Python tutorial
ghi9101 Update installation instructions
jkl1121 Initial commit
1-2. Interactive Rebase 사용
// 최근 3개의 커밋 합치기
git rebase -i HEAD~3

// 특정 커밋 해시 기준 전까지 합치기
git rebase -i jkl1121
1-3. 커밋 합치기
  • 에디터 나오게 된다.
  • 에디터를 수정하자 (아래와 같이)
[수정 전]
pick ghi9101 Update installation instructions
pick def5678 Add Python tutorial
pick abc1234 Fix typo in README

[수정 후] 첫 번째 커밋은 pick으로 두고 나머지는 squash로 변경
pick ghi9101 Update installation instructions
squash def5678 Add Python tutorial
squash abc1234 Fix typo in README
1-4. 커밋 메시지 작성
  • 이전 단계 저장하게되면 새로운 에디터 창 노출
  • 해당 에디터 창에서 합쳐진 커밋의 메시지 작성
1-5. 강제 푸시 (중요)
git push --force
  • 나중에 문제가 생기면 언제든지 이 백업 브랜치로 돌아갈 수 있음
(추가)
1. 작업전 브랜치
  • git branch backup-branch
2. 특정 브랜치에서만 작업
  • 메인 브랜치가 아닌 별도의 작업 브랜치에서 이 작업을 수행하고, 이후에 깔끔한 PR을 만드는 것도 좋은 방법
3. 팀에 알리기
  • 이미 푸시된 커밋을 변경한 경우, 같은 브랜치를 사용하는 팀원들에게 알려서 git pull —rebase를 사용하도록 안내

2. Git —ammend

이미 푸시된 커밋의 메시지만 변경

// 1. 커밋 메시지 수정
git commit --amend

// 2. 변경사항 강제 푸시
git push --force