티스토리 뷰
Do it! 지옥에서 온 문서 관리자 깃&깃허브 입문
Git 공부 일기 3일차 - 깃과 브랜치
브랜치
● 버전 관리 시스템에서 데이터 흐름을 가리키는 말
● 커밋을 가리키는 포인터라고 생각하기
● main브랜치에서 새로운 브랜치를 만드는 것 => 분기(branch)
● 새 브랜치에서 원하는 작업을 다 끝난 후 main브랜치하고 합치는 것 => 병합(merge)
실습하기
1. manual디렉터리 생성 + manual 디렉터리로 이동 + manual 디렉터리를 저장소로 만들기
2. work.txt 텍스트 파일 생성(content1입력) + 스테이징 + 커밋(메시지는 work 1)
3. work.txt 텍스트 파일 수정(content2입력) + 스테이징 + 커밋(메시지는 work 2)
4. work.txt 텍스트 파일 수정(content3입력) + 스테이징 + 커밋(메시지는 work 3)
5. 새로운 branch 만들기 - git branch 이름 / git branch - 현재 저장소의 branch 확인
● 현재 작업하고 있는 branch는 main이라는 의미
6. 커밋 로그 확인해보기
● 저장소에 main과 apple이라는 branch가 있고 현재 작업하고 있는 곳은 main branch라는 의미
7. branch추가로 만들기
● 저장소에 main, ms, google, apple이라는 branch가 있고 현재 작업하고 있는 branch는 main branch라는 의미
8. 새 커밋을 추가하고 확인하기 $ git log --oneline(한 줄에 한 커밋씩 보여줌)
● 최신 커밋인 main work4는 main브랜치에만 적용됨 / ms, google, apple은 work3 커밋상태
=> 새로만든 커밋은 현재 브랜치에만 적용되고 나머지 브랜치에는 적용 x, 브랜치별로 커밋 관리 가능
9. 브랜치 전환하기 -- git switch 브랜치명
● git switch apple입력 후 파란색 글씨가 (main)에서 (apple)로 바뀜 => 현재 작업하고 있는 브랜치가 apple로 바뀜
● git log로 확인해보면 HEAD는 apple을 가리키고 있고 있는 것을 볼 수 있음
10. 텍스트 내용 확인하기
● work.txt내용을 보면 content4는 없는 것을 확인할 수 있음 => 최신 커밋이 work3이기 때문에 content3까지만 저장됨
● content4는 main브랜치에서만 작업했기 때문에 apple브랜치에는 나오지않음 => 브랜치끼리 영향을 미치지 않는다
브랜치 정보 확인하기
● 브랜치마다 만들어진 커밋이 서로 어떻게 관계가 있는지 확인
● 브랜치 사이의 차이점을 확인
1. work.txt파일의 내용을 수정 + apple.txt파일을 새로 만든 후 content4입력 + 스테이징과 커밋
● 현재 브랜치는 apple이며 최신 커밋은 apple work4 / ms와 google브랜치의 커밋은 work 3
2. 브랜치와 커밋 관계 알아보기 : git log --oneline --branches
● 현재 브랜치인 apple브랜치의 커밋은 apple~ / main브랜치의 커밋은 work4 / ms와 google브랜치의 커밋은 work3
3. 브랜치와 커밋 관계를 그래프로 보기 : git log --oneline --branches --graph
● 빨간줄의 수직선이 생성됨 / 그래프의 방향은 위에서 아래쪽으로 읽기
● 먼저 apple work 4는 work 3커밋까지 이어져 있음 => apple브랜치에서는 work 3생성 후 apple work 4 생성
● main work 4는 work 3커밋까지 이어져 있음 => main브랜치에서는 work 3생성 후 main work 4생성
4. 브랜치 사이의 차이점 살펴보기
● $ git log main ..apple은 apple브랜치에만 있는 것을 보여줌 => apple work 4
● $ git log apple ..main은 main브랜치에만 있는 것을 보여줌 => main work 4
브랜치 병합하기
#1 서로 다른 파일 병합하기
1. 홈 디렉터리에서 manual-2 디렉터리 생성 후 깃 저장소 만들고 확인
● main브랜치로 돌아옴
2. work.txt 파일을 만들고 1 입력 후 저장 + work 1 메시지와 함께 커밋
● 현재까지의 상태
=> HEAD - MAIN - work 1(HEAD는 main브랜치를 가리킴 / main이 work 1을 커밋 중)
HEAD
|
main
|
work 1
3. o2 branch 생성
● 현재까지의 상태
(HEAD는 main브랜치를 가리킴 / main이 work 1을 커밋 중/ 02는 work1을 커밋 중)
HEAD
|
main
|
work 1
|
02
4. main.txt파일 생성 + main 2라고 입력 + main work 2라는 메시지와 함께 커밋
● 현재까지의 상태
=> HEAD
|
main
|
main work 2 < - - - - - -- work 1
|
02
main이 main work2를 커밋 중
5. 02브랜치에서 02.txt생성 + 2 입력 + 02 work 2라는 메시지로 커밋
● 현재까지의 상태
=> HEAD는 02를 가리키고 있고 02는 02 work 2를 커밋 중
main
|
main work 2 < - - - - - - - - - -- work 1
| - - - - - - - - - -- - - 02 work 2
|
02
|
HEAD
6. 그래프로 커밋의 상태 확인하기
● main 브랜치 입장에서 main work 1 -> main work 2순으로 커밋이 생김
● 02 브랜치 입장에서 main work 1 -< 02 work 2순으로 커밋이 생김
7. 브랜치 병합하기 : 브랜치를 main으로 전환 후 $ git merge 병합하고자 하는 브랜치
● 현재까지의 상태
=> HEAD는 02를 가리키고 있고 02는 02 work 2를 커밋 중
HEAD
|
main
|
merge branch 02 < - - - - - - - - - -- main work 2 < - - - - - - - - - -- work 1
| |
| - - - - - - - - - - - - - - - -- - - 02 work 2 < - - - - - - - - - - - - - - - - - - - -|
|
02
#2 서로 다른 브랜치에서 한 문서의 다른 부분을 수정했을 때 병합하기
#2-1 : 같은 문서에서 서로 다른 부분을 수정했을 때
1. 홈 디렉터리로 이동 후 manual-3이라는 깃 저장소 만들고 디렉터리로 이동
2. work.txt파일을 만들고 아래와 같은 내용 입력 후 스테이징+커밋
3. 02라는 브랜치 만들기 : & git branch 02
4. main 브랜치에서 work.txt수정(빈칸 첫 번째 줄에 main content 2입력) + 스테이징과 커밋
5. 02브랜치에서 work.txt수정(빈칸 두 번째 줄에 02 content 2라고 입력) + 스테이징과 커밋
6. main브랜치로 전환 + 깃 병합
● main 브랜치에서 추가한 내용 main content2와 HEAD가 현재 main브랜치를 가리키고 있음을 보여줌
● 02 브랜치에서 추가한 내용 02 content 2와 02브랜치에서 가리키고 있음을 보여줌
#2-2 : 서로 다른 브랜치에서 한 문서의 같은 부분을 수정했을 때
● 깃에서는 줄 단위로 변경 여부를 확인하기 때문에 서로 다른 브랜치에서 같은 문서의 같은 줄을 수정한 경우,
브랜치를 merge하게 되면 브랜치 충돌이 발생함 => 이를 해결해보기
1. 홈 디렉터리로 이동 후 manual-5이라는 깃 저장소 만들고 디렉터리로 이동
2. work.txt파일을 만들고 아래와 같은 내용 입력 후 스테이징+커밋
3. 02라는 브랜치 만들기 : & git branch 02
4. main 브랜치에서 work.txt수정(빈칸 첫 번째 줄에 main content 2입력) + 스테이징과 커밋
5. 02브랜치에서 work.txt수정(빈칸 두 번째 줄에 02 content 2라고 입력) + 스테이징과 커밋
6. main브랜치로 전환 + 깃 병합
● 이전과는 다르게 빔이 자동으로 열리지 않고 경고 메시지가 나타남 => 병합 충돌이 발생했다는 의미
7. 사용자가 충돌 부분을 직접 해결한 후 커밋해야 함
● work.txt에서 <<<<head와 >>>>02를 삭제하기
8. 수정한 work.txt를 스테이징 + 커밋(커밋 메시지 merge 02 branch)
● 오류없이 잘 병합된 걸 볼수 있음
9. 병합이 끝난 브랜치 삭제하기 --- $ git branch -d 브랜치명
● 02 브랜치가 삭제된 것을 볼 수 있음
#2-3 : cherry-pick으로 병합하기
●브랜치 전체를 병합하는 것이 아닌 어느 특정 브랜치의 특정 버전의 변경 내용만 합치려고 할 때 사용하는 기능
1. 홈 디렉터리로 이동 후 cheery-pick이라는 깃 저장소 만들고 디렉터리로 이동
2. init.txt파일을 만들고 아래와 같은 내용 입력 후 스테이징+커밋
3. topic 브랜치 만들기 : & git branch topic + 깃로그 확인
● main 브랜치와 topic 브랜치가 init을 커밋중
4. m1과 m2라는 2개의 버전 더 만들고 git log로 확인
5. topic 브랜치로 전환 후, 똑같이 t1, t2, t3의 버전 만들고 git log로 확인
6. cherry-pick을 사용하기 위해 병합될 브랜치인 main 브랜치로 이동
7. t2 버전을 병합하기 -- $ git cherry-pick 체리픽할 커밋 해시
8. ls로 확인 및 git log로 확인
● main브랜치에 있던 init.txt, m1, m2 다음에 t2가 합쳐짐 /
● topic 브랜치에도 t2가 있고 main 브랜치에도 t2가 있음 - 잘 병합됨
'Tools > Git&Github' 카테고리의 다른 글
[Git/Github]깃 브랜치 관련 명령어 (2) | 2024.12.26 |
---|---|
[Git&Github] 깃 오류(git@github.com:Permission denied(publickey) ) (0) | 2024.08.04 |
[Git&Github] 깃 초기 관리 & 깃허브에 프로젝트 올리기 (0) | 2024.08.04 |
Git 공부 일기 2일차 - 깃으로 버전 관리하기 (0) | 2024.03.02 |
Git 공부 일기 1일차 - 깃 시작하기 (0) | 2024.02.25 |
- Total
- Today
- Yesterday
- DP
- HTML5
- 투 포인터
- c++ string
- 세그먼트 트리
- 카운팅 정렬
- BFS
- 알고리즘 공부
- 반복문
- 자바스크립트
- java
- 자료구조
- 유클리드 호제법
- js
- 자바
- 에라토스테네스의 체
- 알고리즘
- Do it!
- C++
- 우선순위 큐
- 백준
- CSS
- 스프링 부트 crud 게시판 구현
- 스택
- C++ Stack
- 백준 풀이
- 이분 매칭
- DFS
- html
- 유니온 파인드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |