Git_ 인프런 02

5w31892p·2022년 11월 14일
0

Git

목록 보기
3/10

📜 인프런 강의

:: ✍ git 버전 되돌리기

혼자 실습 많이 해보기
실무에서는 되돌리기 작업이 빈번하게 사용됨

reset은 기존 작업들이 사라지게 되지만 revert는 기존 작업들이 유지됨

" 커밋 되돌리기 "

revert

  • 버전을 되돌릴 새로운 버전으로 만들기
  • 100개의 버전이 있고 99번째 버전으로 돌아가고 싶을 때 사용하면 99번째와 똑 같은 형태의 버전이 101번째에 생김
  • 기존 모든 버전들은 변함이 없이 유지된 채로 새로운 버전이 생김
  • 지금까지 만든 모든 버전 손대고 싶지 않은데 되돌리고 싶을 때 사용

reset

  • 버전을 완전히 되돌리기
  • 시간을 되돌리듯이 되돌리고 싶은 버전의 시점으로 돌아감
  • 되돌리고 싶은 버전의 시점으로 돌아가기 때문에 그 이후 버전은 모두 사라짐

reset 종류

  1. soft reset

    • 커밋만 되돌리기
    • 저장소로 커밋했다는 사실만을 reset
    • 변경사항 생성과 스테이지 추가 add는 그대로 유지
  2. mixed reset

    • 스테이지까지 되돌리기
    • 스테이지 했다는 사실까지 reset
    • commit과 add 까지 reset
    • 변경사항 생성만 유지
  3. hard reset

    • 작업디렉터리까지 되돌리기
    • 변경사항 생성부터 add, commit 모두 reset

revert

  • 이전까지의 작업은 그대로 두고 이전의 작업으로 되돌린 새로운 commit을 만드는 과정
  • 이전 버전으로 revert 하려면 현재 버전 우클릭 후 커밋 되돌리기
  • revert 하려는 버전의 다음 버전에 우클릭 후 커밋 되돌리기

reset

  • 되돌리고 싶은 버전 우클릭 후 이 커밋까지 브랜치를 초기화 클릭 후 soft, mixed, hard 설정

작업 임시 저장하기 - stash

  • 버리긴 아깝고 쓰자니 아쉬울 때 사용
  • 수정 작업 중인데 수정 요구가 바뀌었을 때 현재까지의 수정 작업은 stash로 임시 저장
  • 오른쪽 스태시 열고 우클릭해서 적용 & 삭제 가능

stash 방법

  1. 임시 저장할 add되지 않은 파일 클릭 후 상단 스태시 클릭
  2. 현재 무슨 작업을 하다가 임시 저장하는지 적고 확인

:: ✍ 브랜치로 나눠 관리하기

브랜치로 나눠 관리하는 이유

버전을 다른 흐름으로 가고 싶을 때 기존 버전은 기존 버전대로 가고
다른 흐름으로 가고 싶은 시점에서 브랜치 나눠 기존과 다른 흐름으로 갈 수 있음

  • 브랜치란?

    • 버전을 여러 개의 흐름으로 관리하는 방법
    • 버전의 분기
    • 나무가지 같은 모양
  • 브랜치가 없다면?

    • 서로 작업과 전혀 관련없는 부분, 같은 코드를 다르게 수정한 부분 혼재
    • 일일이 수작업으로 합쳐야함
    • 때로는 서로의 코드 합치다 실수할 수 있음
    a는 장바구니 기능, b는 주문 목록 기능을 작업 중일 때
    브랜치가 없다면 전체 뼈대가 되는 웹사이트 코드를 복사해서 작업 해야함
    추후 기능을 합칠 때 문제가 발생할 가능이 높음
    
    
    c회사에서 다른 업체에 프로그램을 납품했을 시 각 업체마다 다른 요구사항을 할 때
    각 프로그램 복사 후 각 요구사항에 맞게 새로운 버전 커밋을 해야 함
    추후 c회사의 버전이 v10.0.0이됐고, 각 버전별의 요구사항의 총 합이 1000개가 넘어갈 정도로 많아졌을 때
    각 버전별로 복사 후 수정 해야함  
    

브랜치로 버전의 분기 관리하는 방법

  1. 브랜치 나누기
  2. 각자 브랜치에서 작업
  3. 필요시 나눈 브랜치 합치기
  • 각자 브랜치를 나눠 각자 작업하면 후 필요시 합치면 됨

  • 브랜치를 사용해서 합쳤을 때에는 같은 부분을 다르게 수정한 부분들만 보면 됨

    a와 b는
    각 기능별 즉, 장바구니 브랜치, 주문목록 등 브랜치로 나누면 됨
    
    
    c회사는 
    요구사항에 맞게 그때 그때 해당 버전에서 브랜치 나눠서 작업후 커밋 

브랜치 나누기

  • 브랜치는 버전을 여러 개의 흐름으로 관리하는 방법
  • 즉, 버전의 분기
    master 브랜치로 3개의 커밋이 쌓여있고, 3번째에서 foo브랜치 생성한다면 foo브랜치는 5개의 브랜치가 쌓여있는 것
    master 브랜치로 4개의 커밋이 쌓여있고, 3번째 커밋에서 foo브랜치 생성한다면 foo브랜치는 5개의 브랜치가 쌓여있고, 4번째 커밋에서 bar브랜치 생성한다면 bar는 6개 브랜치 쌓여있음

master 브랜치

  • 깃이 기본적으로 제공하는 브랜치
  • 모든 커밋들은 기본적으로 모두 master 브랜치에 속해있음
  • 깃허브는 기본브랜치가 main

브랜치 이름

  • 기능과 목적에 맞게끔
    메뉴기능 추가를 위한 브랜치 : feature/menu
     로그인 기능 급하게 수정하기 위한 브랜치 : hotfix/login
     2.3.0버전 릴리스를 위한 브랜치 : release/2.3.0

브랜치를 나눈 후 특정 브랜치에서 작업하기

  • HEAD와 체크아웃
  1. HEAD

    • 현재 작업 중인 브랜치 커밋을 가르킴
    • 일반적으로 현재 작업 중인 브랜치의 최신 커밋을 가르킴
    • 한마디로 “지금 내가 어디에서 작업 중인가”를 가르킴
    • HEAD는 자유자재로 변경 가능
    HEAD가 master 4번 커밋을 가르킨다면, 커밋은 4개 쌓여있고, 작업환경은 master 4번 커밋에 맞춰져 있음
     HEAD가 가지쳐져 나간 foo 5번 커밋을 가르킨다면, 커밋은 5개 쌓여있고, 작업환경은 foo 5번 커밋에 맞춰져 있음
     HEAD가 가지쳐져 나간 bar 6번 커밋을 가르킨다면, 커밋은 6개 쌓여있고, 작업환경은 bar 6번 커밋에 맞춰져 있음
  1. checkout

    • HEAD가 자유자재로 특정 브랜치에서 작업할 수 있도록 작업 환경을 바꿔 주는 것이 체크아웃
    • HEAD의 위치를 특정 브랜치의 최신 커밋으로 옮김
    master브랜치에 있다가 foo브랜치로 옮기고 싶을 때에는 foo브랜치로 checkout하게 되면 foo브랜치의 최신 커밋으로 이동
    또, foo브랜치에 있다가 bar브랜치로 옮기고 싶을 때에는 bar브랜치로 checkout하게 되면 bar브랜치의 최신 커밋으로 이동

소스트리에서 브랜치 나누기

  1. 먼저 마스터1, 마스터2로 커밋 2개 만들기
  2. 상단 브랜치 클릭 후 이름 넣기
  3. 새브랜치 체크아웃에 체크가 되어 있다면 생성과 동시에 해당 브랜치고 옮긴다는 뜻
  4. foo브랜치 생성 후 보면
  5. 마스터브랜치에서 가장 최신 커밋에서는 파일 2개

브랜치 옮기기

  • 오른 쪽 해당 브랜치명 더블클릭하게 되면 해당 브랜치로 체크아웃 됨

브랜치 삭제

  • 삭제하고자 하는 브랜치가 선택되지 않은 상태에서 우클릭 후 삭제

브랜치 합치기

  • 브랜치를 합치다 = 브랜치를 병합 = merge

foo를 master에 병합하면?

  • master 위로 합쳐진 foo가 쌓이고 작업이 반영됨 (foo가 뻗어나온 커밋 이후로 커밋 없을 경우)
  • foo 뻗어 나오고, foo에 커밋 쌓이고 병합되는 순가까지 master 그 후 커밋하지 않고 가만히 있음
  • 그래서 master는 마치 빨리감기하듯 foo에 추가된 커밋을 반영하기만 하면 됨
  • 이렇게 변함이 없던 브랜치(master)가 빨리감기하듯 브랜치 내용이 업데이트 되는 병합 기법을 빨리감기 병합 (fast-forward merge) 라고 함
  • bar에 없는 커밋이 master에 있고 , master에 없는 커밋이 bar에 있는 상황이라면
  • 즉 master에 5개의 커밋이 있는데 bar는 master 3번째 커밋에서 생성된 후 bar는 총 6개의 브랜치가 있을 경우 병합을 하게 된다면
  • master로 빨리감기 병합이 되는게 아니라 두 브랜치가 합쳐진 새로운 커밋이 생성됨

0개의 댓글