Github 스터디 3주차_Branch&Conflict

박신영·2023년 4월 2일
2

Github Study_2023

목록 보기
4/8

유튜브 링크

1 브랜치란

깃으로 버전 관리 시작 시 기본적으로 main 브랜치(branch)가 생성된다

branch 분기한다 : main 브랜치에서 새 브랜치를 만든다
merge 병합한다 : 분기했던 브랜치를 main 브랜치에 합친다

기본 파일은 main 브랜치에 둔 상태로 새로운 브랜치를 분기한 후 수정&추가 작업 진행, 그 후 새 브랜치의 내용을 main 브랜치와 병합

2 브랜치 만들기 및 이동하기

MINGW64 ~/manual (main) // 디렉터리 경로 맨 끝의 (main)은 현재 브랜치가 main이라는 뜻
git branch

  • main // *는 현재 작업 중인 브랜치를 나타냄

MINGW64 ~/manual (main)
git branch apple

MINGW64 ~/manual (main)
git branch
apple

  • main
    git log 명령을 사용해 확인한 커밋 로그 화면도 (HEAD -> main) 👉 (HEAD -> main, apple)
    HEAD -> main이므로 현재 작업하는 브랜치가 main 브랜치임을 의미함

git log --oneline
b569314 (HEAD -> main) main work 4 // 현재 브랜치는 main. main 브랜치의 최신 커밋
f6886bf (ms, google, apple) work 3 // ms, google, apple 브랜치의 최신 커밋
64f7a37 work 2
f1ee225 work 1
브랜치 전환하기 - git switch
git swich apple
파일 경로 끝에 (apple) 표시 = 현재 apple 브랜치에서 작업 중이란 뜻
git log --oneline
f6886bf (HEAD -> apple, ms, google) work 3
64f7a37 work 2
f1ee225 work 1
커밋 해시에서 HEAD -> apple로 변경됨

cat work.txt
content 1
content 2
content 3

최신 커밋이 work 3이기 때문에 content 1~3만
main content 4는 apple 브랜치를 분기한 후에 main 브랜치에 추가된 커밋이라서 apple 브랜치에 영향 ❌

git add . // 현재 저장소에서 수정 내용이 있는 파일을 스테이지에 한꺼번에 올림
git log --oneline
8618857 (HEAD -> apple) apple work 4 // apple 브랜치로 전환한 상태. apple 브랜치의 최신 커밋은 apple work 4
f6886bf (ms, google) work 3
64f7a37 work 2
f1ee225 work 1
브랜치와 커밋 관계 알아보기

git log --oneline --branches
8618857 (HEAD -> apple) apple work 4
b569314 (main) main work 4
f6886bf (ms, google) work 3
64f7a37 work 2
f1ee225 work 1
git log --oneline --branches --graph

  • 8618857 (HEAD -> apple) apple work 4
    | * b569314 (main) main work 4
    |/
  • f6886bf (ms, google) work 3
  • 64f7a37 work 2
  • f1ee225 work 1
  • 8618857 (HEAD -> apple) apple work 4
    |
    |
  • f6886bf (ms, google) work 3
    apple 브랜치의 최신 커밋은 apple work 4
    점선을 따라가면 부모 커밋은 work 3
    = apple 브랜치에선 work 3 커밋 담에 apple work 4 커밋 만들어짐
    • b569314 (main) main work 4
  • f6886bf (ms, google) work 3
    main 브랜치의 최신 커밋은 main work 4
    대각선을 따라가면 부모 커밋은 work 3
    부모 커밋이 같은 것을 보아, main 브랜치나 apple 브랜치는 work 3 커밋까진 같고 그 이후부터 브랜치마다 다른 커밋을 만듦

브랜치 사이의 차이점 살펴보기

main 브랜치에 없고 apple 브랜치에만 있는 커밋을 보여줌

3.깃과 브랜치

1)
브랜치(branch): 버전 관리 시스템에서 나무가 가지에서 새 줄기를 뻗듯이 여러갈래로 퍼지는 데이터흐름을 가리키는 말로 사용

브랜치가 필요한 이유: 수정한 내용이 의도치 않게 바뀌거나 사라지는 것을 방지하기 위해서 필요하다.

main(master) 브랜치: 이름만 서로 다를 뿐, 깃을 사용할때 기본이 되는 브랜치라는 개념은 같다.

분기(branch):새 브랜치를 만들면 기존 파일은 main브랜치에 그대로 유지하면서 새 브랜치에서 기존파일 내용을 수정하거나 새로운 기능을 추가할수 있다.

병합(merge): 분기했던 브랜치를 main브랜치에 합치는것

2)

git branch:새 브런치 만들고 확인하는 명령
git switch: 브랜치 전환하기

3)브랜치 정보 확인하기

전환한 브랜치에서 커밋하기
git log --branches:브랜치마다 최신 커밋을 한눈에 살펴볼수 있다.
git log --graph: 브랜치와 커밋의 관계를 그래프 형태로 표시할수 있다.

브랜치 사이의 차이점 알아보는법: git 명령에서 브랜치 이름사이에 마침표 2개(..)를 넣기

4 브랜치 병합하기

브랜치마다 각자 커밋할수 있더라도 어느 시점에서는 브랜치 작업을 마무리하고 기존 브랜치와 합쳐야한다.
:빔에서 work.txt파일을 만들고 '1'을 입력한후 저장하고 work1이라는 메세지와 함께 커밋한 상태
:o2라는 브랜치를 만듦
:main.txt파일을 하나더 만듦, 빔에서 main2라고 입력한후 종료
:o2브랜치에서 o2.txt 파일을 만들고 2를 입력 후 저장
:main브랜치를 기준으로 o2브랜치를 가져와 병합

-서로 다른 브랜치에서 한 문서의 다른 부분을 수정했을때 병합하기
main 브랜치와 o2브랜치 양쪽에서 work.txt파일을 수정
-> 문서안의 수정위치는 다름
o2브랜치를 main 브랜치에 합치기 위해 main브랜치로 전환한다.(git merge이용)
Auto-merging work.txt: 병합 완료 메세지

-서로 다른 브랜치에서 한 문서의 같은 부분을 수정했을 때 병합하기
main 브랜치와 o2브랜치 양쪽에서 work.txt파일을 수정했는데 문서의 안의 수정위치가 같을때
-> 사용자가 충돌 부분을 직접해결한후 커밋

-병합이 끝난 브랜치 삭제하기
브랜치를 병합한후 더 이상 사용하지 않는 브랜치는 깃에서 삭제가능
(브랜치를 삭제하더라도 완전히 지워지는것은 아니며 같은 이름의 브랜치를 만들면 예전 내용을 다시 볼수 있음.)

저장소의 기본 브랜치는 main이므로 브랜치를 삭제하려면 main브랜치에서 해야함.
git branch -d (삭제할 브랜치 이름)
Deleted baranch (삭제한 브랜치 이름): 메세지가 뜬다면 브랜치 삭제에 성공한것.

cherry pick으로 병합하기

이와같은 브랜치 구조를 가진 저장소가 있다고 가정

main브랜치와 topic브랜치를 병합한다면 두개의 브랜치를 병합하는 새로운 버전 mt3가 생김(병합하며 새로운 버저닝 추가됌) -merge

이에 비해 cherry-pick은 main브랜치와 topic브랜치를 합치긴 하는데 브랜치 전체를 합치는 게 아니라 topic브랜치중 특정 버전의 변경 내용만 합치려할때 사용하는 기능(topic브랜치의 다른버전들은 합쳐지지 않음)

profile
기술블로그

0개의 댓글