https://learngitbranching.js.org/?locale=ko
Learn Git Branching
An interactive Git visualization tool to educate and challenge!
learngitbranching.js.org
직접 해본 정답 모음

답만 원하시는 분
2.1 Detach yo’ HEAD
git checkout bugfix^;
2.2 Relative Refs (^)
git checkout C4^;
2.3 Relative Refs #2 (~)
git checkout C0; git branch -f bugFix HEAD~0; git checkout C6; git branch -f main HEAD~0; git checkout C1
git checkout bugFix; git branch -f bugFix HEAD~3; git checkout C6; git branch -f main HEAD~0; git checkout C1;
2.4 Reversing Changes in Git
git reset HEAD~1; git checkout pushed; git revert pushed;
git reset HEAD^; git checkout pushed; git revert pushed;
2. 다음단계로
여기서부터는 커밋 트리(commit tree)에서 자유롭게 이동할 수 있는 방법에 대해 배운다.
HEAD란?
- HEAD는 현재 작업 중인 브랜치를 가리킨다.
- 브랜치는 커밋을 가리키므로 HEAD도 커밋을 가리킨다.
- 결국 HEAD는 현재 작업 중인 브랜치의 최근 커밋을 가리킨다.
새로운 커밋을 생성하면
- 새로 커밋을 생성하면 그 커밋의 부모는 언제나 이전 HEAD 커밋
- 커밋이 생성되면 HEAD는 새로운 커밋으로 갱신된다.
- HEAD가 가리키는 브랜치도 HEAD와 함께 새로운 커밋을 가리킨다.
명령어 정리
`git checkout `: HEAD 분리
`^` (캐럿) 연산자 : 한 번에 한 커밋 위로 움직임
- main^는 "main의 부모"와 같은 의미
- main^^ 는 "main의 조부모(부모의 부모)"를 의미
`~<num>` (틸드) 연산자 : 한번에 여러 커밋 위로 올라감
- git branch -f main HEAD~#
(강제로) main 브랜치를 HEAD에서 3번 뒤로 옮기기
- `git reset ` : local 브랜치에서 작업 되돌리기
- `git revert` : remote 브랜치에서 작업 되돌리기
2.1 Git에서 여기저기로 옮겨다니기
HEAD란 현재 체크아웃된 commit을 가리킨다. ( = 현재 작업 중인 commit)
HEAD는 항상 작업트리의 가장 최근 커밋을 가리킨다.
작업트리에 변화를 주는 git 명령어들은 대부분 HEAD를 변경하는 것으로 시작된다.
일반적으로 HEAD는 브랜치 이름을 가리킨다. (여기서는 bugFix)
Commit을 하게 되면, 그 브랜치의 상태가 바뀌고, 이 변경은 HEAD를 통해서 확인가능하다.
HEAD를 분리한다는 것은 HEAD를 브랜치 대신 commit에 붙이는 것을 의미한다.
- 헤드 분리 전: HEAD -> main -> C1
- 헤드 분리 후: HEAD -> C1



2.2 상대참조(^) Relative Refs
각 commit은 해시값으로 특정지을 수 있다. 그래서 여기저기 이동할 때 커밋의 해시를 사용하는 방법은 조금 귀찮다. 실제로 Git을 사용할 때는 터미널화면 옆에 예쁘장하게 커밋트리가 보이진 않기 때문이다. 아마도 매번 해시를 확인하려고 git log 명령어를 치고 있을 것이다.
나아가서, 실제 Git에서는 해시들이 훨씬 더 길고 복잡하다. 예를 들면 해시 하나가 fed2da64c0efc5293610bdd892f82a58e8cbc5d8 이렇게 길다. 결코 쓰기 쉬워 보이지 않는다.
다행히 Git은 똑똑하기 때문에 해시가 커밋의 고유한 값임을 보여줄 수 있을 만큼만 명시해주면 된다. 위의 긴 문자열 대신 fed2만 입력해도 되는 것이다. 하지만 그래도 여전히 커밋들을 해시로 구분하고 사용하는것이 아주 편하다고 볼 수는 없다. Git의 상대 참조(Relative Ref)가 여기서 등장한다. 상대 참조로 우리가 기억할 만한 지점(브랜치 bugFix라든가 HEAD라든가)에서 출발해서 이동하여 다른 지점에 도달해 작업을 할 수 있다.
^ (캐럿) 연산자 : 한 번에 한 커밋 위로 움직인다.
- main^는 "main의 부모"와 같은 의미
- main^^ 는 "main의 조부모(부모의 부모)"를 의미
~<num> (틸드) 연산자 : 한번에 여러 커밋 위로 올라간다.
캐럿 연산자 실습



2.3 상대참조 #2 (~)
상대참조 #2 실습은 틸드 연산자 실습이다.
틸드 연산자 실습

1) `git branch -f main C6` : main 브랜치를 C6 commit으로 강제 이동
2) `git branch -f bugFix HEAD~2` : bugFix 브랜치를 HEAD에서 2번 뒤인 C0 commit으로 강제 이동
3) `git checkout HEAD^` : HEAD의 부모 commit인 C1으로 이동





2.4 Git에서 작업 되돌리기
Git에는 작업한 것을 되돌리는 여러가지 방법이 있다. 변경내역을 되돌리는 것도 커밋과 마찬가지로 낮은 수준의 일(개별 파일이나 묶음을 스테이징 하는 것)과 높은 수준의 일(실제 변경이 복구되는 방법)이 있는다. 여기서는 후자에 집중해서 실습한다.
Git에서 변경한 내용을 되돌리는 방법은 크게 두가지가 있다.
-- 하나는 `git reset`을 쓰는거고, 다른 하나는 `git revert`를 사용하는 것이다.
git reset 실습
- 예전의 커밋을 가리키도록 이동시키는 방법으로 변경 내용을 되돌린다.(= '히스토리 고쳐쓰기')
- 마치 애초에 커밋하지 않은 것처럼 예전 커밋으로 브랜치를 옮기는 것
- 각자의 컴퓨터에서 작업하는 로컬 브랜치의 경우 reset을 잘 쓸 수 있지만, '히스토리를 고쳐 쓴다'는 점 때문에 다른 사람이 작업하는 리모트 브랜치에는 쓸 수 없다.
- 만약 `git reset HEAD~1` 로컬 저장소에는 마치 C2 commit이 아예 없었던 것과 마찬가지 상태가 된다.
git revert 실습
- 변경분을 되돌리고, 되돌린 내용을 다른 사람들과 공유하기 위해서는 git revert를 쓴다.
- `git revert HEAD`

1) `git reset HEAD^` : local 브랜치가 부모 commit(C1) 가리키도록 작업 되돌리기 (로컬이니까 reset)
2) `git checkout pushed` : pushed 브랜치로 이동
3) `git revert HEAD` : 변경된 만큼을 되돌려서 새로운 commit(C2)를 생성한다. (리모트 브랜치에서는 revert 사용하기)





'Git&GitHUB' 카테고리의 다른 글
Git Branching 연습하기 (3) 코드 이리저리 옮기기 (cherry-pick/Interactive rebase) (1) | 2025.05.23 |
---|---|
[깃/깃허브] Git Bash에서 $ 프롬프트가 안 뜰 때 해결법 (6) | 2025.05.22 |
Git Branching 연습하기 (1) git 기본 (commit/branch/checkout/merge/rebase) (3) | 2025.05.21 |
[깃/깃허브] 커밋 잔디 색상, 왜 점점 진해지기 어려워지나요? (2) | 2025.05.20 |
[깃/깃허브] 초보자들이 헷갈려하는 HEAD 랑 main 차이! (1) | 2025.05.20 |
https://learngitbranching.js.org/?locale=ko
Learn Git Branching
An interactive Git visualization tool to educate and challenge!
learngitbranching.js.org
직접 해본 정답 모음

답만 원하시는 분
2.1 Detach yo’ HEAD git checkout bugfix^; 2.2 Relative Refs (^) git checkout C4^; 2.3 Relative Refs #2 (~) git checkout C0; git branch -f bugFix HEAD~0; git checkout C6; git branch -f main HEAD~0; git checkout C1 git checkout bugFix; git branch -f bugFix HEAD~3; git checkout C6; git branch -f main HEAD~0; git checkout C1; 2.4 Reversing Changes in Git git reset HEAD~1; git checkout pushed; git revert pushed; git reset HEAD^; git checkout pushed; git revert pushed;
2. 다음단계로
여기서부터는 커밋 트리(commit tree)에서 자유롭게 이동할 수 있는 방법에 대해 배운다.
HEAD란?
- HEAD는 현재 작업 중인 브랜치를 가리킨다.
- 브랜치는 커밋을 가리키므로 HEAD도 커밋을 가리킨다.
- 결국 HEAD는 현재 작업 중인 브랜치의 최근 커밋을 가리킨다.
새로운 커밋을 생성하면
- 새로 커밋을 생성하면 그 커밋의 부모는 언제나 이전 HEAD 커밋
- 커밋이 생성되면 HEAD는 새로운 커밋으로 갱신된다.
- HEAD가 가리키는 브랜치도 HEAD와 함께 새로운 커밋을 가리킨다.
명령어 정리
git checkout
: HEAD 분리
^
(캐럿) 연산자 : 한 번에 한 커밋 위로 움직임
- main^는 "main의 부모"와 같은 의미
- main^^ 는 "main의 조부모(부모의 부모)"를 의미
~<num>
(틸드) 연산자 : 한번에 여러 커밋 위로 올라감
- git branch -f main HEAD~#
(강제로) main 브랜치를 HEAD에서 3번 뒤로 옮기기
- git reset
: local 브랜치에서 작업 되돌리기
- git revert
: remote 브랜치에서 작업 되돌리기
2.1 Git에서 여기저기로 옮겨다니기
HEAD란 현재 체크아웃된 commit을 가리킨다. ( = 현재 작업 중인 commit)
HEAD는 항상 작업트리의 가장 최근 커밋을 가리킨다.
작업트리에 변화를 주는 git 명령어들은 대부분 HEAD를 변경하는 것으로 시작된다.
일반적으로 HEAD는 브랜치 이름을 가리킨다. (여기서는 bugFix)
Commit을 하게 되면, 그 브랜치의 상태가 바뀌고, 이 변경은 HEAD를 통해서 확인가능하다.
HEAD를 분리한다는 것은 HEAD를 브랜치 대신 commit에 붙이는 것을 의미한다.
- 헤드 분리 전: HEAD -> main -> C1
- 헤드 분리 후: HEAD -> C1



2.2 상대참조(^) Relative Refs
각 commit은 해시값으로 특정지을 수 있다. 그래서 여기저기 이동할 때 커밋의 해시를 사용하는 방법은 조금 귀찮다. 실제로 Git을 사용할 때는 터미널화면 옆에 예쁘장하게 커밋트리가 보이진 않기 때문이다. 아마도 매번 해시를 확인하려고 git log 명령어를 치고 있을 것이다.
나아가서, 실제 Git에서는 해시들이 훨씬 더 길고 복잡하다. 예를 들면 해시 하나가 fed2da64c0efc5293610bdd892f82a58e8cbc5d8 이렇게 길다. 결코 쓰기 쉬워 보이지 않는다.
다행히 Git은 똑똑하기 때문에 해시가 커밋의 고유한 값임을 보여줄 수 있을 만큼만 명시해주면 된다. 위의 긴 문자열 대신 fed2만 입력해도 되는 것이다. 하지만 그래도 여전히 커밋들을 해시로 구분하고 사용하는것이 아주 편하다고 볼 수는 없다. Git의 상대 참조(Relative Ref)가 여기서 등장한다. 상대 참조로 우리가 기억할 만한 지점(브랜치 bugFix라든가 HEAD라든가)에서 출발해서 이동하여 다른 지점에 도달해 작업을 할 수 있다.
^ (캐럿) 연산자 : 한 번에 한 커밋 위로 움직인다.
- main^는 "main의 부모"와 같은 의미
- main^^ 는 "main의 조부모(부모의 부모)"를 의미
~<num> (틸드) 연산자 : 한번에 여러 커밋 위로 올라간다.
캐럿 연산자 실습



2.3 상대참조 #2 (~)
상대참조 #2 실습은 틸드 연산자 실습이다.
틸드 연산자 실습

1) git branch -f main C6
: main 브랜치를 C6 commit으로 강제 이동
2) git branch -f bugFix HEAD~2
: bugFix 브랜치를 HEAD에서 2번 뒤인 C0 commit으로 강제 이동
3) git checkout HEAD^
: HEAD의 부모 commit인 C1으로 이동





2.4 Git에서 작업 되돌리기
Git에는 작업한 것을 되돌리는 여러가지 방법이 있다. 변경내역을 되돌리는 것도 커밋과 마찬가지로 낮은 수준의 일(개별 파일이나 묶음을 스테이징 하는 것)과 높은 수준의 일(실제 변경이 복구되는 방법)이 있는다. 여기서는 후자에 집중해서 실습한다.
Git에서 변경한 내용을 되돌리는 방법은 크게 두가지가 있다.
-- 하나는 git reset
을 쓰는거고, 다른 하나는 git revert
를 사용하는 것이다.
git reset 실습
- 예전의 커밋을 가리키도록 이동시키는 방법으로 변경 내용을 되돌린다.(= '히스토리 고쳐쓰기')
- 마치 애초에 커밋하지 않은 것처럼 예전 커밋으로 브랜치를 옮기는 것
- 각자의 컴퓨터에서 작업하는 로컬 브랜치의 경우 reset을 잘 쓸 수 있지만, '히스토리를 고쳐 쓴다'는 점 때문에 다른 사람이 작업하는 리모트 브랜치에는 쓸 수 없다.
- 만약 git reset HEAD~1
로컬 저장소에는 마치 C2 commit이 아예 없었던 것과 마찬가지 상태가 된다.
git revert 실습
- 변경분을 되돌리고, 되돌린 내용을 다른 사람들과 공유하기 위해서는 git revert를 쓴다.
- git revert HEAD

1) git reset HEAD^
: local 브랜치가 부모 commit(C1) 가리키도록 작업 되돌리기 (로컬이니까 reset)
2) git checkout pushed
: pushed 브랜치로 이동
3) git revert HEAD
: 변경된 만큼을 되돌려서 새로운 commit(C2)를 생성한다. (리모트 브랜치에서는 revert 사용하기)





'Git&GitHUB' 카테고리의 다른 글
Git Branching 연습하기 (3) 코드 이리저리 옮기기 (cherry-pick/Interactive rebase) (1) | 2025.05.23 |
---|---|
[깃/깃허브] Git Bash에서 $ 프롬프트가 안 뜰 때 해결법 (6) | 2025.05.22 |
Git Branching 연습하기 (1) git 기본 (commit/branch/checkout/merge/rebase) (3) | 2025.05.21 |
[깃/깃허브] 커밋 잔디 색상, 왜 점점 진해지기 어려워지나요? (2) | 2025.05.20 |
[깃/깃허브] 초보자들이 헷갈려하는 HEAD 랑 main 차이! (1) | 2025.05.20 |