과거의 나 : (무지성) commit, merge
현재의 나 : (아! 생각보다 커밋 기록을 확인할 일이 있네.. 커밋 메시지랑 기록을 잘 남겨놔야 하는 것을 깨달은 상태)
그래서, merge, rebase, cherry-pick, squash and merge 에 대해 정리를 진행해보려한다
- 커밋이 분기되는 base를 수정하는 작업
- 공통된 커밋으로부터 수정하려는 base 커밋까지의 차이점을
1) 패치(patch)에 임시로 저장하고
2) 참조 커밋을 수정한 후
3) 패치(patch)를 순차적으로 적용한다
- 새로운 commit을 만들지 않는다
issue1 : 함수 결함 수정
issue2 : 함수 추가
방법1) 작업용 브랜치끼리 병합을 마친 후, 배포용 브랜치에 병합하는 방법
방법2) 작업 종류가 유사한 브랜치끼리 한줄기로 표시되도록 정리하는 방법
issue2의 base를 issue1로 재배치하고자한다
issue2 브랜치 : git rebase issue1
rebase를 취소 : git rebase --abort
충돌 해결후 : git add . git rebase --continue
[rebase 사용 예시] https://jojoldu.tistory.com/120
브랜치를 생성하고 작업이 끝난 다음 master에 merge를 진행할 때까지 master에 어떠한 변경도 없는 경우
master를 새로 생성한 브랜치와 동일한 커밋을 가르키도록 이동만 하면 된다
base에서 commit을 진행해서 분기해 나간 상태
두 브랜치 중 어느 것도 base에 위치하지 않음
새로운 commit이 생성됨
fast-forward merge가 되면서 master에 dev1의 commit이 모두 합쳐짐
--ff
현 브랜치와 merge 대상 브랜치가 fast-forward 관계에 있는 경우 새로운 commit을 생성하지 않고
브랜치의 참조 값만 변경되도록 함
fast-forward 관계가 아니면 merge commit을 생성함
--no-ff
merge 대상과 fast-forward 관계여도 강제로 merge commit을 생성하고 병합함
브랜치 관계에 상관없이 필요한 commit만 가져올 수 있음
어떤 브랜치에서 merge 했는지 기록을 남길 수 있음
--squash
commit 이력과 merge된 브랜치 이력도 남기지 않음
새로운 commit에 상대 브랜치의 내용을 모두 뭉쳐 놓음
다만, dev1 브랜치의 한단계 이전 commit 을 병합하려 한다
방법1) dev1 브랜치를 원하는 commit까지 hard reset한 후 merging
- 기존의 이력을 삭제해버린다
방법2) git cherry-pick 명령 사용하기
- 과거 이력 중 필요한 부분만 가져온다
HEAD가 가리키는 현재 브랜치에 특정 commit 추가 : git cherry-pick [commit hash]
cherry-pick 작업 취소 : git cherry-pick --abort
충돌 해결후 : git add . git cherry-pick --continue
merge commit을 추가 : git cherry-pick –m [parent number] [merge commit ID]
merge commit의 경우 어떤 부분의 merge를 가져올지 알 수 없다. 그래서 parent number를 추가해야 한다.(1부터 시작하며 main line이 1)
협업
A와 B가 분업 중, A가 본인이 작성한 부분을 테스트하기 위해서는 B가 구현한 부분이 필요함
B가 완성이 안된경우, B가 작성한 commit 하나만 찾아서 A의 브랜치에 가져와서 시험
버그 수정
기능 1을 완성하고 기능2를 개발 중.
나중에 알고보니 기능1에 버그가 있음
사람들이 버그로 인한 불편을 겪기 전에 버그 패치를 해서 배포용 브랜치에 cherry-pick
[ 출처 ]
[git] 생존을 위한 git : Git과 관련된 협업의 모든 것 (0) | 2024.12.31 |
---|---|
[git] git branch 전략 : develop, release, hotfix (0) | 2024.03.18 |
[git] 생존을 위한 Git : 되돌리기 시리즈 --amend, reset, revert (0) | 2024.03.18 |
[git] 생존을 위한 git : 파일의 상태 , 커밋 히스토리 (0) | 2024.03.15 |
[코드리뷰] 코드리뷰 by 드림앨리 (0) | 2023.09.24 |