HEAD
HEAD는 Git에서 현재 체크아웃된 브랜치 또는 커밋을 가리키는 포인터이다.
HEAD는 작업 트리의 마지막 커밋을 가리키며, 현재 작업 중인 브랜치를 가리킨다. 예를 들어, main 브랜치가 체크아웃되어 있다면, HEAD는 main 브랜치를 가리키고, main 브랜치는 마지막 커밋을 가리킨다.
• 현재 작업 위치: HEAD는 현재 작업 중인 브랜치나 커밋을 나타낸다.
• 포인터: HEAD는 커밋을 가리키는 포인터로서, 현재 체크아웃된 브랜치의 최신 커밋을 가리킨다.
예를 들어, git checkout main 명령어를 실행하면 HEAD는 main 브랜치를 가리키게 된다. 만약 특정 커밋 해시를 사용하여 체크아웃한다면, HEAD는 해당 커밋을 가리키게 된다.
체크아웃 (checkout)
작업할 브랜치 지정, HEAD의 위치를 변경한다.
$ git checkout [브랜치명 or 커밋의 해시]
$ git checkout c1 -- 1번 방법 (브랜치 명)
$ git checkout 6b941b22 -- 2번 방법 (커밋의 해시)
상대 참조
상대 참조는 현재 위치에서 상대적인 위치를 기준으로 커밋을 참조하는 방법이다.
상대 참조에는 두 가지 주요 기호가 있다: 캐럿(^)과 틸드(~).
이 기호들은 현재 커밋을 기준으로 부모 커밋이나 조상 커밋을 참조할 때 사용된다.
캐럿 (^)
캐럿 기호는 부모 커밋을 나타낸다. 캐럿의 개수에 따라 몇 단계 위의 부모 커밋을 참조할지를 결정한다.
- 캐럿 1개 (^): 바로 1단계 부모 커밋
- 캐럿 2개 (^^): 부모 커밋의 부모 커밋
$ git checkout main^ -- 한 단계 부모 커밋으로 이동
$ git checkout main^^ -- 두 단계 부모 커밋으로 이동
틸드 (~)
틸드 기호는 숫자와 함께 사용되어, 현재 커밋에서 주어진 숫자만큼의 조상 커밋을 참조한다.
- ~1: 1단계 부모 커밋
- ~2: 2단계 부모 커밋
$ git checkout main~1 -- 1 단계 부모 커밋으로 이동
$ git checkout main~3 -- 3 단계 부모 커밋으로 이동
브랜치 (Branch)
브랜치(Branch)는 main 브랜치와는 독립적인 작업 공간이다. 즉, 브랜치를 사용하면 서로 다른 기능이나 버그 수정을 동시에 진행할 수 있다. 아래 그림에서 Bugfix와 Feature는 각각 독립된 브랜치이다.
브랜치 생성
$ git branch [신규 브랜치 명]
$ git branch test-branch
* main
test-branch
브랜치 이동
$ git checkout [브랜치명]
브랜치 생성 및 바로 이동
위 과정이 귀찮으면 브랜치를 생성하면서 바로 그 브랜치로 이동할 수 있는 옵션도 있다.
- -b: branch의 약자
$ git checkout -b [신규 브랜치 명]
브랜치 합치기 (병합 또는 머지)
$ git merge [작업한 브랜치]
브랜치 삭제
$ git branch -d [삭제할 브랜치 명]
커밋 (commit)
커밋 추가
변경 사항을 저장소에 추가하는 데 사용된다.
$ git add .
$ git commit -m "커밋 메세지 내용"
커밋 수정
커밋 메시지를 수정하거나, 커밋에 빠진 파일을 추가하거나 불필요한 파일을 제거하고자 할 때 사용된다.
최근 커밋에 소소한 변경 사항을 추가하고자 할때 사용할 수도 있다.
이 명령어는 마지막 커밋을 수정하는것이기 때문에 새로운 커밋을 생성하지 않는다. 기존 커밋을 업데이트하고 이로 인해 커밋 해시가 변경된다.
$ git commit --amend
커밋 취소 (reset)
이전에 커밋한것을 취소할 때 사용한다. 그리고 커밋 이력이 변경된다.
$ git reset HEAD^
$ git reset "취소할 커밋 체크섬"
커밋 되돌리기 (revert)
기존 커밋의 변경 사항을 되돌리는 새로운 커밋을 생성하는 명령어다.
이전 커밋과 반대의 내용으로 커밋이 추가된다. 즉, 과거 커밋 이력은 유지된다.
$ git revert "되돌릴 커밋 체크섬"
$ git revert "커밋 체크섬".."커밋 체크섬"
커밋 가져오기 (cherry-pick)
특정 커밋을 선택하여 현재 작업 중인 브랜치에 적용하는 명령어이다. 이는 다른 브랜치의 특정 커밋 하나(또는 여러 개)를 가져와서 현재 브랜치에 적용하는 데 사용된다.
$ git cherry-pick "커밋 체크섬"
- git cherry-pick:
• 목적: 특정 커밋 하나(또는 여러 개)를 현재 브랜치에 적용.
• 사용 사례: 다른 브랜치에서 특정 기능이나 수정 사항이 포함된 커밋 하나만 필요할 때 사용.
• 작동 방식: 선택한 커밋의 변경 사항을 현재 브랜치의 새로운 커밋으로 추가.
• 명령어: git cherry-pick <commit-hash> - git merge:
• 목적: 다른 브랜치의 전체 내용을 현재 브랜치에 병합.
• 사용 사례: 두 브랜치의 작업을 합쳐서 하나의 브랜치로 만들고자 할 때 사용.
• 작동 방식: 두 브랜치의 변경 사항을 합치고, 병합 커밋을 생성.
• 명령어: git merge <branch-name> - git pull:
• 목적: 원격 저장소의 변경 사항을 가져와 현재 브랜치에 병합.
• 사용 사례: 원격 저장소의 최신 변경 사항을 로컬 브랜치에 적용하고자 할 때 사용.
• 작동 방식: git fetch와 git merge를 연속적으로 실행하여 원격 브랜치의 변경 사항을 가져오고, 이를 현재 브랜치에 병합.
• 명령어: git pull <remote> <branch>
요약
• git cherry-pick: 특정 커밋을 선택하여 현재 브랜치에 적용. 원하는 커밋만 선택적으로 가져올 수 있다.
• git merge: 다른 브랜치의 전체 내용을 현재 브랜치에 병합. 두 브랜치의 모든 변경 사항을 합친다.
• git pull: 원격 저장소의 변경 사항을 현재 브랜치에 병합. 원격 저장소의 최신 상태를 로컬 브랜치에 적용한다.
'ETC' 카테고리의 다른 글
[GIT] rebase, rebase squash (0) | 2024.08.09 |
---|---|
이메일 프로토콜 이해하기: SMTP, POP, IMAP의 기능과 설정 (2) | 2024.01.21 |
Mac M1에서 iTerm2 꾸미기 - 테마 변경, syntax highlighting 적용 (0) | 2023.12.04 |