오늘은 Learn Git Branching을 통해서 깃허브 명령어를 정리해보고자 한다.
Learn Git Branching
Learn Git Braching이란 Git branch을 사용하는 방법을 가이드와 그림으로 나타내어 학습할 수 있는 사이트이다.
해당 사이트에 들어가보면, git명령어에 대한 소개를 소스트리와 실습을 통해 알려주는데, 오늘은 이를 통해 해당 기능들을 모두 학습해보려 한다.
Commit
git 저장소에 스냅샷에 대한 기록을 남기는 것을 의미한다. 해당 소스트리에서는 커밋을 하게되면 C1, C2 등의 새로운 노드가 생성된다.
git commit -m [커밋메세지]
Branch
브랜치는 특정 커밋에 대한 참조를 남기는 것을 의미한다. 변경 사항이 없는 한 각 브랜치에서 마지막으로 커밋한 노드를 참조한다.
git branch [브랜치명] // 브랜치 생성
git branch -f [브랜치명] [커밋노드] // 브랜치가 가르키는 커밋 노드 위치를 변경
git checkout [브랜치명] // 해당 브랜치로 이동
git checkout -b [브랜치명] // 브랜치 생성과 해당 브랜치로 바로 이동
Merge
각 분기되어 있는 브랜치를 합치는 것을 의미한다.병합을 하면 합쳐진 브랜치의 커밋 메시지가 중복으로 쌓이며, 새로운 Merge 커밋을 생성한다.
git merge [합치고자 하는 브랜치]
여기서 중요한 점은 만약 내가 C3(main)에서 "git merge bugFix"을 하게 되면, 원래 있던 bugFix을 가리키던 브랜치는 그대로 있고 main 브랜치가 merge로 인해 bugFix와 합쳐진 노드를 가리키는 것을 조심해야 한다.
Rebase
Rebase 란 현재 작업하는 브랜치에서 대상 브랜치를 base로 해서 커밋 이력을 재정렬하는 것을 의미한다. 얼핏보면 아니 Rebase와 Merge가 무슨 차이인데? 라고 생각이 들 수 있는데,자세한 내용은 아래 글을 참조하자.
bugFix, main 브랜치가 분기하여 각 커밋을 남겼다. 만약 base을 이용하여 main 커밋이력위에 bugFix을 정렬하고 싶다면 아래 명령어를 이용하여 처리한다.
git checkout bugFix
git rebase main
인터렉티브 Rebase
기존 rebase 명령어에 -i을 붙이게 된다면 현재 HEAD기준으로 원하는 커밋을 가져와 합칠 수 있다.
git rebase -i HEAD~4
HEAD
HEAD란 현재 체크아웃된 커밋을 가리키는 것을 의미한다. 쉽게 말하자면 작업중인 커밋을 말한다. 만약에 다른 커밋으로 HEAD을 옮기고 싶다면 아래와 같이 명령어를 사용한다.
git log // git log을 통해 commit 기록들을 찾는다.
git checkout [커밋 해쉬값]
상대참조
만약 git log로 일일이 커밋 기록을 찾아 해쉬값으로 checkout 하기 귀찮다면 상대참조를 이용하여 올라가는 방법이 있다.
git checkout HEAD^ // 현재 커밋 바로 전으로 이동
git checkout HEAD~[숫자] // 숫자만 큼 전으로 이동
Reset, Revert
git에서 작업한 내용을 되돌리는 방법은 2가지가 있다. Reset을 이용하는 방법과 Revert을 이용하는 방법이다.
- Reset
Reset은 브랜치로 하여금 예전의 커밋을 가르키도록 이동시키는 방법으로 변경 내용을 되돌린다. 마치 애초에 커밋을 하지 않은 것 처럼 예전 커밋으로 브랜치를 이동시키는 방법이다.
git reset [커밋 해쉬값]
- revert
로컬 브랜치인 경우에는 reset을 사용하여 처리할 수 있지만, 히스토리를 고쳐쓴다는 점 때문에 리모트 브랜치에서 쓰기 어렵다. 변경분을 되돌리고 이 되돌린 내용을 다른 사람과 공유하기 위해서는 git revert을 이용하면 좋다.
git revert [커밋 해쉬값]
revert을 사용하게 되면 과거 커밋으로 돌아간 변경분으로 새로운 노드가 생성된다.
Cherry-pick
cherry-pick은 현재 HEAD 아래에 있는 일련의 커밋들에 대한 복사본을 만들겠다라는 것을 의미한다. 만약 아래의 상황과 같이 main으로 복사하고 싶은 side 브랜치가 있다고 가정한다. 이는 rebase 명령어로 처리 할 수도 있지만, cherry-pick을 이용하면 쉽게 해결 가능하다.
git cherry-pick c2 c4
'Cloud > Git' 카테고리의 다른 글
Commit Convention (유다시티 커밋 메세지 스타일 가이드) (0) | 2024.05.02 |
---|---|
특정 Commit으로 되돌리기 (0) | 2023.02.17 |
Stash (0) | 2023.02.17 |
Branch와 Merge (0) | 2023.02.17 |
Repository와 Commit (0) | 2023.02.17 |