
main branch
bugFix 생성git branch bugFix

bugFix로 이동git checkout bugFix

bugFix에서 commitgit commit

main로 이동한 후 commitgit checkout main
git commit

bugFix로 이동한 후 rebasegit checkout bugFix
git rebase main


1.
git rebase main bugFix

2.
git rebase bugFix side

3.
git rebase side another

4.
git rebase another main

HEAD는 현재 체크아웃된 커밋을 가리킵니다. -- 다시 말하자면 현재 작업중인 커밋입니다.HEAD는 항상 작업트리의 가장 최근 커밋을 가리킵니다.
HEAD를 분리한다는 것은 HEAD를 브랜치 대신 커밋에 붙이는 것을 의미합니다.
git checkout C4
한번에 한 커밋 위로 움직이는 ^
한번에 여러 커밋 위로 올라가는 ~<num>

git checkout HEAD~4


git cherry-pick C2

HEAD에다 어떤 커밋이든 떨어 뜨려 놓을 수 있다.
git describe {ref}
{ref}에는 commit을 의미하는 그 어떤것이던 쓸 수 있습니다. 만약 ref를 특정 지어주지 않으면, git은 그냥 지금 체크아웃된곳을 사용합니다 (HEAD).
명령어의 출력은 다음과 같은 형태로 나타납니다:
<tag>_<numCommits>_g<hash>
tag: 가장 가까운 부모 태그.
numCommits: 그 태그가 몇 커밋 멀리있는지를 나타냄.
<hash>: 묘사하고있는 커밋의 해시.

git describe main
>> v1_2_gC2
git describe side
>> v2_1_gC4

1.
git checkout main^

2.
git checkout main^2


1.
git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2;
or
git checkout HEAD~^2~2

(1) Commit
git commit
(2) Branch
git branch bugFix
git checkout bugFix
(3) Merge
git branch bugFix
git checkout bugFix
git commit
git checkout main
git commit
git merge bugFix
(4) Rebase
git checkout -b bugFix
git commit
git checkout main; git commit;
git checkout bugFix; git rebase main;
(5) HEAD 분리하기
git checkout C4
(6) 상대 참조 1
git checkout bugFix; git checkout HEAD^
(7) 상대 참조 2
git branch -f main C6
git checkout HEAD~1
git branch -f bugFix HEAD~1
(8) Git에서 작업 되돌리기
git reset HEAD~1
git checkout pushed
git revert HEAD
(9) Cherry-pick
git cherry-pick c3 c4 c7
(10) Git 인터렉티브 리베이스
git rebase -i HEAD~4
→ 작업창이 뜨면 c2는 제거하고, c4는 밑으로 이동.
(11) 한 개의 커밋만 가져오기
git checkout main
git cherry-pick C4
(12) 커밋들 갖고 놀기 1
git rebase -i HEAD~2
→ C3와 C2의 위치 교환
git commit --amend
git rebase -i HEAD~2
→ C3' 와 C2'' 위치 교환
git branch -f main c3''
(13) 커밋 갖고 놀기 2
git checkout main
git cherry-pick C2
git commit --amend
git cherry-pick C3
(14) Git 태그
git tag v0 c1; git tag v1 c2;
git checkout v1
(15) Git describe
git describe main; git describe side;
git commit
(16) 여러 브랜치를 리베이스(rebase)하기
git rebase main bugFix
git rebase bugFix side
git rebase side another
git rebase another main
(17) 다수의 부모
git branch -f bugWork HEAD~^2~
(18) 브랜치 스파게티
git checkout one; git cherry-pick C4 C3 C2;
git checkout two; git cherry-pick C5 C4 C3 C2;
git branch -f three c2