[Git]

또잉의 공부일지·2023년 11월 28일

현재 버전의 부모는 HEAD이다.

HEAD: 현재 버전
main(master): 마지막 버전

각각의 commit은 commit을 한 시점에 stage area의 스냅샷이다

checkout은 HEAD를 바꾼다.
git checkout b: HEAD가 b를 가리킴

시간여행 후 복귀:
git checkout main

detached HEAD state의 위험성:
HEAD가 main을 가리키지 않아서

checkout, reset 중요
checkout은 HEAD를 옮기고 reset은 HEAD가 가리키는 branch를 옮긴다.

git rebase / git merge 차이?

$ git rebase [master]

newbase를 base로 삼아 rebase 한다.

업로드중..

내부에서는 master가 base가 되고, C3과 C4의 차이를 임시 저장하는 공간에 저장한다. 이 임시저장 공간을 Patch라고 한다.
그리고 base가 되는 master에 Patch들이 적용된다.

마지막으로 master 브랜치를 fast-forward

$ git checkout [master]
$ git merge [experiment]

업로드중..

끝.

위의 과정을 merge로 하면
업로드중..
이렇게 된다.

차이점 1) Rebase에서는 Merge와 다르게 커밋 히스토리가 한 줄로 깔끔하게 정렬된다. 그래서 보통 remote 브랜치에 커밋을 깔끔하게 적용하고 싶을 때 사용한다.
차이점 2) Rebase는 브랜치의 변경사항 Patch를 이용 / Merge의 경우는 두 브랜치의 최종 결과만을 이용

git checkout / resest 차이?

git checkout은 HEAD 자체가 다른 커밋이나 브랜치를 가리키도록 한다. 작업 공간의 상태 변경에 이용된다. 다른 커밋을 가리키도록 하면 HEAD detached 상태가 됨(꼭 필요한 것이 아니면 비추천).

git reset은 HEAD가 가리키던 브랜치가 다른 커밋을 가리키도록 한다. 주로 커밋을 취소하거나 커밋 헤드를 이전 상태로 되돌리는 데 이용된다.

git cherrypick

다른 브랜치의 커밋을 선택적으로 내 브랜치에 적용.
git cherry-pick [커밋 해시1][커밋 해시2]
conflict가 나면?
1. conflict 해결 후 git cherry-pick --continue
2. git cherry-pick --abort로 중단

참고:
https://velog.io/@kwonh/Git-Rebase%EB%9E%80
https://imasoftwareengineer.tistory.com/7

0개의 댓글