IT story

GitHub / BitBucket에서 병합 커밋 지옥을 피하는 방법

hot-time 2020. 9. 16. 20:58
반응형

GitHub / BitBucket에서 병합 커밋 지옥을 피하는 방법


우리는 repo에서 다음과 같은 많은 커밋으로 끝납니다.

Merge branch 'master' of bitbucket.org:user/repo

이것은 개발자가 자신의 로컬 포크를 최상위 저장소에 동기화 할 때마다 발생합니다.

어쨌든이 병합 커밋 지옥이 모든 저장소 로그를 어지럽히는 것을 피할 수 있습니까? 어떤 식 으로든 pull-request를 시작할 때이를 피할 수 있습니까?

로컬 VM에서만 수행되는 경우 git rebase를 수행 할 수 있다는 것을 알고 있습니다. GitHub / BitBucket UI에 동등한 항목이 있습니까?

너희들은 어떻게하니?


병합하기 전에 기능 분기 리베이스

병합 커밋을 피하려면 모든 커밋이 빨리 감기인지 확인해야합니다. 다음과 같이 병합하기 전에 기능 브랜치가 개발 라인에 깔끔하게 리베이스하는지 확인하여이를 수행합니다.

git checkout master
git checkout -b feature/foo

# make some commits

git rebase master
git checkout master
git merge --ff-only feature/foo

Rebase에는 플래그를 사용한 대화 형 리베이스를 포함하여 많은 -i플래그가 있지만 가능한 한 단순하게 유지하고 병합에서 모든 분기 기록을 보존하려는 경우에는 필요하지 않을 수 있습니다.

--ff-only깃발 사용

리베이스 외에도 --ff-only플래그를 사용하면 빨리 감기 커밋 만 허용됩니다. 대신 병합 커밋이면 커밋이 이루어지지 않습니다. git-merge (1) 매뉴얼 페이지는 다음과 같이 말합니다.

--ff 전용

현재 HEAD가 이미 최신 상태이거나 병합이 빨리 감기로 해결 될 수없는 경우 0이 아닌 상태로 병합 및 종료를 거부합니다.


"Todd A. Jacobs"는 이미 언급 한 "rebase"개념입니다. 이것은 일을하는 더 자세한 방법 일뿐입니다.

마스터 브랜치에 있다고 가정 해 보겠습니다.

$ git branch
  * master

수정을 원하므로 마스터에서 분기되는 "fixbranch"를 작성하십시오.

$ git checkout -b fixbranch

이 지점에서 며칠 동안 일하고 몇 번의 커밋을 수행했을 것입니다.

커밋을 중앙 마스터 리포지토리에 푸시하고 싶었던 날! 마스터를 체크 아웃하고 중앙 마스터 저장소에서 최신 변경 사항 가져 오기

$ git checkout master
$ git pull origin master

마스터로 fixbranch를 리베이스하여 깨끗한 히스토리를 갖고 로컬 리포지토리 자체에있는 경우 충돌을 해결하십시오.

$ git checkout fixbranch
$ git rebase master

이제 fixbranch가 중앙 마스터로 업데이트되었습니다. fixbranch를 마스터 브랜치에 병합하겠습니다.

 $ git checkout master
 $ git merge fixbranch

끝났어! 로컬 마스터를 중앙 마스터로 푸시하겠습니다.

$ git push origin master

https://git-scm.com/book/en/v2/Git-Branching-Rebasing

참고 URL : https://stackoverflow.com/questions/16358418/how-to-avoid-merge-commit-hell-on-github-bitbucket

반응형