[TIL] 깃헙 Merge

sooyoung choi·2024년 1월 8일
0

Git

목록 보기
2/3
post-thumbnail

팀과제 진행중 팀원들이 pull request 받으면 merge 버튼 안눌리도록 보호하려고 했는데 dev 브랜치로 푸시가 된 상황이었다. 아직 초기설정이라 전혀 타격이 없었지만 한창 진행중에 그랬으면 큰일날뻔 했다.ㅎㅎ 충돌지옥

  • Setting > General 밑으로 내려가다보면 pull request 관련 설정 칸이 나온다.
    해당 칸을 비워놓으면 merge 버튼이 안눌린다.

세팅 과정중에서 저 3개의 버튼 중 무조건 하나의 버튼은 클릭해야하는 상황이였는데 어떤걸 선택해야할 지 몰라서 알아보았다.

Allow merge commits

Fast-forward 방식

  • 새로운 브랜치 my-branch 가 main 브랜치로부터 분기된 이후 main 브랜치에 새로운 커밋이 올라오지 않았다면, my-branch 가 main 와 비교하여 최신의 브랜치라고 할 수 있다.

  • 이런 경우 my-branch 의 변경 이력을 그대로 main 으로 가져올 수 있다.

Recursive 방식

  • my-branch 가 main 브랜치에서 분기되고, main 브랜치에 새로운 커밋이 생겼다면, my-branch 를 최신이라고 할 수 없다.

  • my-branch 와 main 을 공통 부모로 한 새로운 Merge Commit 을 생성하게 된다.

  • Fast-Forward Merge가 가능한 상태에서 git merge 명령에 --no-ff 옵션을 주면 강제로 Merge Commit을 생성하게 할 수 있다.

Squash merging

  • commit F + G + H를 합쳐서 새로운 commit, FGH를 만들어 master에 추가된다.
  • FGH는 1개의 parent를 가진다.
  • feature 브랜치의 commit history를 합쳐서 깔끔하게 만들기 위해 사용한다.

Rebase merging

  • my-branch 가 main 브랜치의 A 커밋에서 분기되었을때, my-branch 의 Base는 A 커밋이다.
  • Rebase 라는 것은 말 그대로 Base를 다시 설정한다는 의미이다.
  • 즉, my-branch 가 분기된 main 브랜치의 최신 커밋이다.
  • Rebase를 하면 커밋들의 Base가 변경되므로 Commit Hash 또한 변경 될 수 있다.
  • 이로 인해 Force Push를 해야할 경우도 있으니 주의하자.

0개의 댓글