[GITn] Git3 CLI Branch & Conflict

Sireal·2022년 6월 10일
0

Git

목록 보기
4/5
post-thumbnail

branch 란?

  • 나뭇가지
  • 버전관리를 하다보면
    용도에 따라 버전이 나눠지기도, 나눠진게 합쳐지기도 하는데, 이런 모습이 나뭇가지 모양이 나옴.

Conflict 란?

  • 충돌
  • 서로 다른 파일에 branch를 병합할 때 충돌 안남. 알아서 합쳐서 자동으로 생성됨
  • 같은 파일에 같은 부분이 있는 branch 끼리 병합하게 되면.. 충돌 남.

실습환경을 구축하고 시작해봅시당

  • manual 이라는 디렉토리를 만들장
  • manual로 가서 init(저장소 생성)
  • work.txt를 만들자
  • add 해서 Stage에 올리고
  • commit -m 으로 커밋하자
  • 이거 세번 더해서 work.txt의 버전을 3개정도 만들어 두자.
  • git log -p 로 각 버전마다 차이를 확인해보자
  • 잘 만들어 졌누

자 이제 우리는 프로그래머고
고객사 마다 납품해야할 work.txt를 만들어야 한다.
이때 어떻게 해야할까?
branch를 사용하면 된다~

브랜치 사용법

브랜치를 만들고 열람하고 사용해보는 걸 해보자.
git 화면을 두개 만들어보자

  • 아래화면에는 git log --all --oneline(브랜치까지 싹다 보여줌)

    • --oneline : 너무 버전이 장황하게 안나오게 보여줌.

    • 혹은 git log --graph (시각적으로 다보여줌)

  • 을 쳐서 보고 있구

위 화면으로 실습하자.

git branch

밑에 master 보임?
우린 여태 master라는 기본 branch에서 작업하던거였음.

고객사인 apple 의 branch를 생성하고싶으면
git branch apple 이런식으로 치면 됨.

  • 오 개쩐다
  • *별표가 보이면 그친구가 마스터라는 거임.

아래 화면에서 log를 확인해보자

  • apple 브랜치가 생성되어 있다.
  • HEAD -> master 우리는 현재 master에 속해있다.

git branch google : google 브랜치도 만들어보자

work.txt 에서 master content 치구 나와보쟈
글구 그친구를 commit 해보자

log 에는 이렇게

  • work3 브랜치들은 저렇게 남겨져있고
  • HEAD 인 master만 새로운버전으로 만들어 져있음.

자 그럼 apple 브랜치에 들어가볼까용?
git checkout apple

  • Head가 apple한테 가면서
    work.txt도 apple 의 버전꺼 처럼 master content라는 글자가 사라져있다...!!(와 미쳤네)
  • 시간여행 미쳤네..


우와ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ

  • 로그상에도 work3 시대로 돌아가고, Head 는 apple.

헤드를 옮기는 명령어
checkout으로 자유롭게 돌아다닐수 있다.

현재 apple이라는 브랜치에 있음.
work.txt 에 apple work 4 기입
그리고 apple.txt 생성하구 apple work 4 기입.

add 하구, commit -m "apple work 4" 해보자

로그 제대로 확인해보기 : git log --oneline --graph --decorate

  • 그래프가 말을 안들어서 명령어를 이정도 추가해서보니 아주깔끔하게 다보여준다.

  • 텍스트환경에서 그래프를 보여줌.. 지림

google, ms 에도 똑같이 해보자(복습)

  • 이게 브랜치다.. 미쳤다...

브랜치는 뭐다? 멀티버스다!!!


브랜치 병합

Merge가 머지? (ㅋㅋㅋㅋ, 강사도 ㅇㅈㄹ 하고있음 ㅋㅋㅋㅋㅋ)
Commit을 하구, Commit을 하고 버전들이 여러개 만들어짐.
근데 branch도 하고 branch도 하고 branch를 하면 또 마스터 브랜치와 여러가지 브랜치가 만들어짐.

근데 타 브랜치와 브랜치 간 병합을 하고 싶을때가 있음.
이 작업을 merge라고 함.

병합된 새로운 버전을 만들게 됨.

합치려는 브랜치 의 공통 조상을 base 라고함.
그리고 합쳐진 브랜치를 merge commit 이라고 함.

실습

현재 디렉토리에서 새롭게 init 해보자
git init manual-merge
cd manual-merge : 새로생성한 git 디렉토리로 들어감

자유롭게 버전 만들자.
나는 work1.txt로 함.

  • 뚝딱

새로운 브랜치를 만들거임
일단 마스터 브랜치에 master.txt 만들고 버전 올리셈.
새로운 브랜치 o2 만들기.
글구 checkout o2 후 o2.txt 만들구 버전올리셈

혹시 현재 commit 된 버전이름을 바꾸고싶다면
git commit --amend : 현재 버전 이름을 수정할 수 있음.

로그확인

  • 이뻐..ㅎㅎ

이제 o2브랜치를 master 브랜치에 합쳐보겠음

  • 일단 master 브렌치로 이동
  • git merge o2
    • 에디터는 알아서 치구(나는 그냥 넘어감)
  • 병합된 친구들을 볼 수 있음.
    (HolyMoly..)

reset 으로 날리고 복습 2회 하기!

같은파일끼리 Merge해보기

새로운 레포지토리 생성 및 위에서 했던거 처럼 작업환경 구축하기
단 work.txt내용은

#content
work

#content
work

이런식으로 작성

master와 o2 브랜치끼리 work.txt의 각자 위아래 코드를 수정하자.

o2를 master로 merge 해보자

합쳐진 파일을 한번 봐보까용?

(엄청나네.. 그냥 합쳐주네)
같은파일이어도, 다른내용이면 자동으로 수정해주는 Git의 강력한기능을 구경해봤음.

한번 충돌(Conflict)를 내보자.

  • Git: 주인님. 자동으로 병합해줄건데, 주인님이 양쪽 파일 모두다 수정을 했기때문에 수정할수가 없네용... 거기만 처리해줘용..!!
  • 이라고 하는것과 같음

아까와 같이 환경설정 후 (master, o2 브랜치)
work.txt를 위와같이 적고
고친내용이 겹치도록
중간내용만 수정해보자

  • 요런식


이렇게 만들어둠

  • merge 해본 결과. Conflict 발생

그럼 어떤상태가 됐을까?

  • 양쪽 파일 모두 수정됐구, 충돌나써염

그럼 work.txt 는 어케됐누

=== 구분자 를 중심으로
HEAD 와 o2 간 충돌났다고 보여줌
이거 주인님이 좀 고쳐줘용.. 하는 표시가 나옴.

그래서 이렇게 우리가 손수 고쳐줌

Git 아! 내가 손수 고쳐줬어 라는 표시로 add 해줌

알게쪄 주인! 고마워 함.
업로드중..

그리고 git commit 만 쳐도
업로드중..
자동으로 Merge 됐다구 다 나옴. (똑똑해 참)

로그를 보면 새로운 버전이 생김
업로드중..

충돌이 나면 깃이 다알려줌. 완전 친절함.

강의 마지막말:
삶에 있어 branch라는게 있으면 얼마나 좋을까요?
하지만 우리의 삶은 version만 되구, branch, reset, merge 이런건 없습니다.
무엇을 잃어야 그것에 대한 소중함을 얻는것들이 너무 많은 것 같아요.
제발 부디 그러지 말고, 사랑하는 이들을 후회없이 사랑하는 삶을 살았으면 좋겠습니다.

(와닿네용 강사님)

profile
달리다 넘어져도 아픔마저 즐기려하는 사람

0개의 댓글