git switch - 브랜치 이동(전환)과 생성 명령
명령어 설명
브랜치 이동(HEAD 이동) 및 브랜치 생성과 관련된 명령어.
기본 사용법
1
2
3
git switch [option] <branch name> # 지정 브랜치로 HEAD 를 이동
git switch -d [commit ID | HEAD~n] # 지정 커밋으로 HEAD 를 이동
git switch -c <branch name> [commit ID] # 새로운 브랜치를 생성 (특정 커밋 지정 가능)
옵션
옵션 | full name | 설명 |
---|---|---|
<branch name> |
주어진 브랜치로 HEAD를 이동시킨다. | |
- |
직전 브랜치로 HEAD를 이동시킨다. | |
-d <commit ID> |
detach | detach특정 커밋으로 HEAD를 이동시킨다. 브랜치가 없을 경우 detached HEAD 상태가 된다. |
-d HEAD~ |
detach | 직전 커밋으로 HEAD를 이동시킨다. detached HEAD 상태가 된다. |
--force <branch name> |
작업 디렉터리와 충돌이 있더라도 무시하고 강제로 지정 브랜치로 HEAD를 이동시킨다. |
|
-c <new branch name> |
create | 주어진 브랜치 이름으로 브랜치를 생성하고 HEAD를 이동시킨다. |
-c <new branch name> <commit ID> |
create | 특정 커밋을 기준으로 새 브랜치를 생성하고 HEAD를 이동시킨다. |
예시
예시 저장소
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 첫 번째 커밋 : 파일 생성
echo '#!/bin/bash' > test.sh
git add ./test.sh
git commit -m "first commit"
# 두 번째 커밋 : 파일 수정
echo "echo Hello Linux" >> test.sh
git commit -am "second commit"
# 세 번째 커밋 : 파일 수정
echo 'echo $0 $1 $2' >> test.sh
git commit -am "third commit"
# n전 커밋으로 이동
git checkout HEAD~1
# 네 번째 커밋 : 새로운 브랜치를 생성 + HEAD 이동 + 파일 수정
git checkout -b new_branch
echo "another branch" >> ./test.sh
git commit -am "4th commit at new branch"
# 다섯 번째 커밋 : 파일 수정 및 커밋
git checkout main
echo "diff test" >> test.sh
echo "diff test - unstaged" >> test.sh
git commit -am "final commit"
# 병합 불가한 브랜치 삭제
git branch list
git branch -d list
git branch -D new_branch
# 현재 저장소의 상태
git log --all --oneline --graph
>> * e35053f (HEAD -> main) final commit
>> * e3b18b3 third commit
>> * 20f7256 second commit
>> * 1219228 first commit
git status
>> On branch main
>> nothing to commit, working tree clean
(1) -c : 새로운 브랜치 생성
1
2
3
4
5
6
7
8
9
# (1) -c : 새로운 브랜치 생성
git switch -c some_branch
>> Switched to a new branch 'some_branch'
git log --oneline
>> e133ba0 (HEAD -> some_branch, main) final commit
>> c175163 third commit
>> cbf9cc6 second commit
>> 37b90cc first commit
(2) - : 직전 브랜치로 이동
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 새로운 커밋 생성
echo "switch test1" >> ./test.sh
git commit -am ./test.sh
git log --oneline --graph
>> * c664a98 (HEAD -> some_branch) ./test.sh
>> * e133ba0 (main) final commit
>> * c175163 third commit
>> * cbf9cc6 second commit
>> * 37b90cc first commit
# (2) - : 직전 브랜치로 이동
git switch -
>> Switched to branch 'main'
git log --oneline --all
>> c664a98 (some_branch) ./test.sh
>> e133ba0 (HEAD -> main) final commit
>> c175163 third commit
>> cbf9cc6 second commit
>> 37b90cc first commit
(3) -d HEAD~n : n 전 커밋으로 이동 (detach)
1
2
3
4
5
6
7
8
9
10
# (3) -d HEAD~n : n 전 커밋으로 이동 (detach)
git switch -d HEAD~2
>> HEAD is now at cbf9cc6 second commit
git log --oneline --all --graph
>> c664a98 (some_branch) ./test.sh
>> e133ba0 (main) final commit
>> c175163 third commit
>> cbf9cc6 (HEAD) second commit
>> 37b90cc first commit
(4) -d commitID : 특정 커밋으로 이동
1
2
3
4
5
6
7
8
9
10
11
# (4) -d commitID : 특정 커밋으로 이동
git switch -d 37b9 # first commit 으로 이동
>> Previous HEAD position was cbf9cc6 second commit
>> HEAD is now at 37b90cc first commit
git log --oneline --all
>> c664a98 (some_branch) ./test.sh
>> e133ba0 (main) final commit
>> c175163 third commit
>> cbf9cc6 second commit
>> 37b90cc (HEAD) first commit
(5) -c commitID : 특정 커밋 ID로 새로운 브랜치 생성
1
2
3
4
5
6
7
8
9
10
11
# (5) -c commitID : 특정 커밋 ID로 새로운 브랜치 생성
git switch -c third_branch c175 # third commit에 새로운 브랜치 생성
>> Previous HEAD position was 37b90cc first commit
>> Switched to a new branch 'third_branch'
git log --all --oneline
>> c664a98 (some_branch) ./test.sh
>> e133ba0 (main) final commit
>> c175163 (HEAD -> third_branch) third commit
>> cbf9cc6 second commit
>> 37b90cc first commit
(6) –forece : 강제 전환
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# (6) --forece : 강제 전환
echo "will be lost" >> ./test.sh # 파일 수정
git switch some_branch
>> error: Your local changes to the following files would be overwritten by checkout:
>> test.sh
>> Please commit your changes or stash them before you switch branches.
>> Aborting # 에러 발생
git switch --force some_branch
>> Switched to branch 'some_branch'
cat ./test.sh
>> \#!/bin/bash
>> echo Hello Linux
>> echo $0 $1 $2
>> diff test
>> diff test - unstaged
>> switch test1