티스토리 뷰

Tools

Git 공부 일기 3일차 - 깃과 브랜치

poopooreum 2024. 3. 11. 19:57
반응형

 

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가 있음 - 잘 병합됨

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함