깃(Git) - 브랜치 만들기 및 이동 , 병합 - 01
1. 터미널 창을 열어 홈 디렉터리에 ‘manual’이라는 새 디렉터리를 만들고 해당 디렉터리로 이동
2. manual 디렉터리를 저장소로 만들고 ls -al 명령을 사용해서 .git 디렉터리가 만들어졌는지 확인
3. manual 디렉터리 안에 work.txt 파일을 만들기 위해 터미널에 다음과 같이 입력해서 빔을 열고, ‘content 1’이라는 내용을 입력한 후 저장
4. 이제 work.txt 파일을 스테이지에 올리고 커밋함
커밋 메시지는 간단히 ‘work 1’이라고 함
5. 커밋이 완료되면 git log를 입력해서 커밋 내역을 확인
커밋 해시 오른쪽에 있는 (HEAD -> main)은 HEAD가 현재 main이라는 브랜치를 가리키고 있다는 뜻이고
(HEAD ->main)이 붙은 커밋이 가장 최신 커밋
현재는 work 1이라는 커밋이 ‘최신 커밋’이라고 알려 주고 있음
6. work.txt 파일에 ‘content 2’를 추가한 후 ‘work 2’라는 메시지와 함께 커밋
7. 다시 한번 work.txt 파일을 열고 ‘content 3’을 추가한 후 ‘work 3’이라는 메시지와 함께 커밋
여기까지 초기 사용 설명서를 만들고 커밋까지 마침
8. 마지막으로 커밋 로그를 다시 한번 더 확인하기 위해 git log를 입력
3개의 커밋이 만들어졌고, 가장 최신 커밋인 work 3에 (HEAD -> main)가 표시되어 있음
새 브랜치 만들기
1. 깃에서 브랜치를 만들거나 확인하는 명령은 git branch
2. main이라고 나타남
저장소를 만들면 main 브랜치가 기본으로 생성되고, 그동안 main 브랜치에서 작업하고 있었던 것
3. 새로운 브랜치를 만들려면 git branch 명령 다음에 만들려는 브랜치 이름을 적음
고객사인 apple의 브랜치를 만들기 위해 다음과 같이 입력
4. apple 브랜치를 만들었는데 화면에는 아무것도 나타나지 않음
현재 저장소의 브랜치를 확인하기 위해 다음과 같이 입력
5. main 브랜치 위에 apple 브랜치가 추가된 것을 확인할 수 있음
main 앞에 * 가 표시된 것은 여러 브랜치 가운데 현재 작업하는 브랜치를 나타냄
아직 main 브랜치에서 작업하고 있다는 뜻
6. 브랜치가 추가된 후에는 커밋 로그 화면도 다르게 나타남
git log 명령을 사용해 커밋 로그를 확인해 보면 그동안 커밋 로그를 확인할 때 (HEAD -> main)라고 표시되던 곳에 apple
브랜치가 추가되면서 (HEAD -> main, apple)로 바뀌어 있음
저장소에 main과 apple이라는 2개의 브랜치가 있고, HEAD -> main이므로 현재 작업하는 브랜치는 main 브랜치라는 의미
7. 앞에서 소개한 방법으로 google 브랜치와 ms 브랜치를 만들고 git branch 명령으로 저장소 안에 있는 모든 브랜치를 확인
커밋 추가
1. git log로 확인해 보면 work 3 커밋 해시의 오른쪽에 main 브랜치를 비롯해 ms, google, apple 브랜치가 함께 표시되어 있음
즉, 이것은 main 브랜치뿐만 아니라 ms와 google, apple 브랜치에도 최신 커밋이 work 3이라는 뜻
2. work.txt 파일 안에 ‘main content 4’라는 내용을 추가한 후 ‘main work 4’라는 메시지와 함께 커밋
3. git log 명령에 --oneline 옵션을 추가해서 확인
--oneline 옵션은 한 줄에 한 커밋씩 보여주기 때문에 여러 커밋을 한눈에 확인할 때 편리
4. 최신 커밋인 main work 4는 main 브랜치에만 적용되어 있고 ms와 google, apple 브랜치는 아직 work 3 커밋 상태
즉, 새로 만든 커밋은 현재 브랜치(main 브랜치)에만 적용되고 나머지 브랜치에는 적용되지 않음
브랜치별로 커밋을 따로 관리할 수 있음
브랜치 전환 - git swith
1. 현재 브랜치에서 다른 브랜치로 전환하려면 git switch 명령 다음에 브랜치 이름을 사용
다음과 같이 입력해서 apple 브랜치로 전환
2. $ 커서 바로 위에 나타난 파일 경로 끝에 (apple)이라고 표시됨
현재 apple 브랜치에서 작업하고 있다는 뜻
3. 작업 브랜치를 apple 브랜치로 바꿨을 때 어떤 변화가 생기는지 확인
git log 명령을 사용해서 현재 브랜치의 커밋 로그를 확인
4. apple 브랜치를 만들기 전까지 main 브랜치에 있던 커밋들은
그대로 apple 브랜치에도 적용되었으므로 work 3 커밋까지 표시됨
커밋 해시에서 HEAD가 apple을 가리키는 것도 확인할 수 있음
5. cat 명령을 사용해 work.txt 파일의 내용을 확인
6. 최신 커밋이 work 3이기 때문에 content 1부터 content 3까지 3개의 행만 있음
main 브랜치에서 입력했던 main content 4가 없음
main content 4는 apple 브랜치를 분기한 후에 main 브랜치에 추가된 커밋이기 때문에
apple 브랜치에 영향을 미치지 않았다는 것을 알 수 있음
전환한 브랜치에서 커밋하기 – (1)
1. apple 브랜치에는 브랜치를 분기할 때 가져온 work.txt 파일이 있음
빔에서 이 파일을 열고 ‘apple content 4’라는 텍스트를 추가하고 저장
2. apple 고객사만을 위한 내용이 담긴 apple.txt 문서를 만들고 여기에도 똑같이 apple content 4를 입력하고 저장
3. 수정한 work.txt 파일과 새로 만든 apple.txt 파일을 각각 커밋할 수도 있지만, 여기에서는 2개를 묶어서 한꺼번에 커밋하려고 함
이럴 때 git add 명령 뒤에 한 칸 띈 후 마침표(.)를 붙이면
현재 저장소에서 수정 내용이 있는 파일을 스테이지에 한꺼번에 올릴 수 있음
다음 명령을 실행하고 ‘apple work 4’라는 메시지와 함께 커밋
4. git log 명령을 사용해 커밋이 어떻게 저장되었는지 확인
5. 첫 번째 줄에 (HEAD -> apple)이라고 되어 있으니 현재 apple 브랜치로 전환한 상태
apple 브랜치의 최신 커밋이 apple work 4라는 걸 알 수 있음
브랜치와 커밋 관계 알아보기 – (1)
1. git log 명령을 사용할 때 --branches 옵션을 추가하면 브랜치마다 최신 커밋을 한눈에 살펴볼 수 있음
이렇게 하면 main 브랜치에는 없고 apple 브랜치에만 있는 커밋, 즉 apple content 4 커밋을 보여줌
2. 결과 화면을 보면 커밋 해시마다 오른쪽에 (HEAD -> apple), (main), (ms, google)이라고 표시되어 있음
이 부분을 보면 해당 커밋이 어떤 브랜치에서 만든 것인지 구별할 수 있음
(HEAD -> apple)이라고 되어 있으니 현재 브랜치는 apple 브랜치고, 최신 커밋은 apple work 4
main 브랜치의 최신 커밋은 main work 4이고, ms 브랜치와 google 브랜치의 최신 커밋은 work 3
3. 브랜치와 커밋 관계를 좀 더 보기 쉽게 그래프 형태로 표시하려면 git log 명령에 --graph 옵션을 추가하면 됨
4. 커밋 내역 왼쪽에 수직선(|)이 커밋과 커밋의 관계를 보여 줌
그래프를 살펴보면 apple 브랜치의 최신 커밋은 apple work 4인데, 점선을 따라 apple work 4 커밋의 부모를 찾아가 보면 work 3
커밋을 만나게 됨
즉, apple 브랜치에서는 work 3 커밋 다음에 apple work4 커밋이 만들어졌다는 뜻
5. main 브랜치의 최신 커밋은 main work 4이고 대각선을 따라가 부모 커밋을 찾아보면 work 3 커밋임
apple 브랜치의 커밋과 main 브랜치의 커밋이 같은 부모 커밋을 가지고 있음
즉, main 브랜치나 apple 브랜치는 work 3 커밋까지는 같고 그 이후부터 브랜치마다 다른 커밋을 만들었다는 사실을 알 수 있음
브랜치 사이의 차이점 살펴보기
• 브랜치마다 커밋이 점점 쌓여 갈수록 브랜치 사이에 어떤 차이가 있는지 일일이 확인하기 어려워짐
• git log 명령에서 브랜치 이름 사이에 마침표 2개(..)를 넣는 명령으로 브랜치 간의 차이를 쉽게 확인할 수 있음
• 브랜치 이름과 마침표 사이는 공백 없이 입력하며, 마침표 왼쪽에 있는 브랜치를 기준으로 오른쪽 브랜치와 비교
• 예를 들어 main 브랜치와 apple 브랜치 사이의 차이점이 무엇인지 확인하려면 다음과 같이 입력
• 이렇게 하면 main 브랜치에는 없고 apple 브랜치에만 있는 커밋 즉, 여기에서는 apple work 4 커밋을 보여 줌
• 반대로 apple 브랜치를 기준으로 main와 비교하면 apple 브랜치에는 없고 main 브랜치에만 있는 main work 4 커밋을 보여 줌
서로 다른 파일 병합하기 – (1)
1. 터미널 창을 열고 홈 디렉터리로 이동
‘manual-2’라는 디렉터리를 만들고 깃 저장소를 만들 텐데, 2가지 과정을 한꺼번에 처리
git init 다음에 디렉터리 이름을 입력하면 새로운 디렉터리를 만들고 저장소를 초기화하는 과정을 한꺼번에 처리할 수 있음
2. manual-2 디렉터리로 이동한 후 ls -al 명령을 사용해서 .git/ 디렉터리가 만들어졌는지 확인
3. 빔에서 work.txt 파일을 만들고 ‘1’을 입력한 후 저장하고 ‘work 1’이라는 메시지와 함께 커밋
4. 이제 ‘o2’라는 브랜치를 만듦
5. main 브랜치에 main.txt라는 파일을 하나 더 만듦
빔에서 ‘main 2’라고 입력한 후 저장하고 ‘main work 2’라는 메시지와 함께 커밋
6. 지금까지 main 브랜치에서 work 1 커밋과 main work 2 커밋을 만들었음
이제 o2 브랜치로 전환
7. o2 브랜치에서 o2.txt라는 파일을 만들고, ‘2’라는 내용을 입력한 후 저장
이어서 o2.txt 파일은 ‘o2 work 2’라는 메시지와 함께 커밋
8. 현재 커밋의 상태를 확인하기 위해 git log 명령을 사용
work 1 커밋은 main 브랜치와 o2 브랜치가 똑같이 가지고 있음
이어서 main 브랜치에는 main work 2 커밋이 생겼고 o2 브랜치에는 o2 work 2 커밋이 생겼음
main 브랜치 입장에서 main work 1 → main work 2 순으로 커밋이 생겼고
o2 브랜치 입장에서 main work 1 → o2 work 2 순으로 커밋이 생겼음
9. 이제 o2 브랜치에서 작업이 모두 끝났다고 가정하면 o2 브랜치의 내용을 main 브랜치로 병합해야 함
브랜치를 병합하려면 먼저 main 브랜치로 전환해야 함
10. 브랜치를 병합할 때는 git merge 명령 뒤에 가져올 브랜치 이름을 적음
main 브랜치를 기준으로 o2 브랜치를 가져와 병합하려면 다음과 같이 입력
11. 빔이 자동으로 실행되면서 ‘Merge branch o2’라는 커밋 메시지가 나타남
브랜치를 병합하면서 만들어진 커밋 메시지인데 커밋 메시지를 수정할 수도 있고 그대로 사용해도 됨
{{ Esc }}를 누르고 :wq를 입력해 내용을 저장한 후 편집기를 종료
12. ls -al 명령을 사용해 확인해 보면 o2 브랜치에 있던 o2.txt 파일이 main 브랜치에 합쳐짐
13. git log 명령으로 브랜치와 커밋이 어떻게 병합되었는지 확인할 수도 있음
o2 work 2 커밋이 main 브랜치에 병합되면서 ‘Merge branch o2’라는 커밋이 새로 생겼음
두 브랜치에서 서로 다른 파일을 병합하는 경우 이렇게 깃에서 간단히 해결할 수 있음