원격 저장소가 바뀌었는데도
그냥
git rebase origin/main
을 하면 변화가 없다
git fetch origin
을 해야, 정보를 가져오고 그것으로 rebase를 진행
git merge
: A 브랜치를 B 브랜치로 합치려 할 땐, A 브랜치를 체크아웃(들어감) 상태에서 git merge B를 입력
처음 머지커밋 하실 때
jimin 브랜치에서
git merge hojin
충돌을 해결한 뒤
git commit을 하면 된다. => 머지 커밋이 생기는데, 이걸 수정하면 안됨! 그냥 놔둬야 한다.
(jimin|MERGING) 이 사라지게 된다.
내가 헷갈린 점
checkout한 브랜치가 B일 때(그러니까 지금 작업중인 브랜치가 B)
git rebase A를 하면
A 위에 B의 작업물(commit)이 쌓이게 된다. (이전에는 두루뭉술하게 A와 B가 합쳐진다고, 혹은 B에 쌓인다고 생각했었는데..)
B의 커밋들은 재배치 된다.
A가 새로운 base가 되는 것
merge와 rebase 차이
1.일반 merge의 경우 merge commit이 생성되(기도 한다. upstream 코드와 conflict이 발생하면)
2. 머지커밋을 만들지 않으려고 rebase를 한다. rebase를 하면 머지커밋이 생성되지 않음
만약 브랜치에서 커밋을 2번 했다면??
-----
깃허브 PR을 merge할 때 merge 방식이 3가지가 있다. (merge, squash, rebase)
이때 (기본)merge를 하게 되면 merge commit 이 생성되면서, 위의 그래프 모양과는 다르게 그래프가 예쁘게 합쳐진다.
나름대로 궁금증에서 내린 결론
1. 왜 main으로 간 다음 rebase를 하는 것일까
git switch main
git fetch upstream
git rebase upstream/main
하는 이유.. 일단 메인을 최신화.한다. 작업을 시작할 때 최신것으로 작업 하기 위해
그리고 내가 작업하다가 다른분이 작업 후 내가 받은 upstream/main이 변경된다면 rebase를 다시 해야된다.
2. PR 후에, conflict가 발생했다. merge commit을 생성하고 싶지 않아..... 그럼 방법이?
git fetch upstream
git merge upstream/main
우선 이렇게, merge를 하면 upstream에 변경분이 있는데 내 코드와 conflict가 발생했을 때 merge commit이 생성된다.
merge conflict를 해결한 후, git commit을 하면서 Merge에 관한 커밋이 새로 생성되기 때문
이는 PR에서 바로 보인다.
git rebase upstream/main
그렇지만 rebase를 하면 upstream에 변경분이 있더라도 conflict를 수정하기만 하면 그냥 merge commit 없이 잘 반영된다.
'Front-End > git' 카테고리의 다른 글
commit이 중복되어 push된 경우(hash value만 다르고 commit 메시지는 동일) (0) | 2023.09.23 |
---|---|
하나의 파일에 포함된 여러 수정 사항을, 분리하여 commit 하는 방법(vscode) (0) | 2023.09.07 |
원격 저장소 코드와 로컬 저장소 코드 동일 여부 확인하기 (0) | 2023.08.18 |
Git 로컬 브랜치명 변경 (0) | 2023.04.05 |
가장 마지막 commit 수정 (0) | 2023.04.04 |