출처: 내일배움캠프 강민철 튜터님 강의!
Inflearn: https://www.inflearn.com/course/모두의-깃-깃허브
Book: http://www.yes24.com/Product/Goods/110795446
Github: https://github.com/kangtegong/
Email: tegongkang@gmail.com
Youtube: https://www.youtube.com/@kangminchul/
유의미한 변화가 결과물로 나온것
EX)
새로운 기능 추가
버그 수정 / 삭제
프로그램 개발이란
유의미한 변화를 쌓아 프로그램을 만들어나가는것
깃은 로컬에서 사용하고 있지만 원격 저장소에 저장 할 수도 있다.
Gitlab도 있지만 가장 유명한 원격 저장소는 당연코 gitHub이다.
한마디로 원격 저장소 호스팅 서비스
-> 인터넷 상에서 깃으로 관리한 프로젝트를 관리해주는 서비스
git config --global user.name "uiseong sang"
git config --global user.email yixing93@naver.com
git config --unser user.name <이름>
git config --unser user.nemail <이메일>
git config user.name "새로운 사용자 이름"
git config user.name "John Doe"
깃이 관리하는 세 개의 공간
(작업 디렉터리 -> 스테이지)
버전으로 만들고 싶은 변경사항이 있으면 다음 스테이지에 올려준다
유의미한 결과만 스테이지로 보내준다
우리는 개발하는 동안 이런 작업을 반복하는 것이다!
- 작업 디렉토리에서 변경사항을 만들고
- 버전으로 만들고 싶은 변경 사항을 스테이지에 추가해서
- 저장소에서 버전을 만든다3. 저장소에서 버전을 만든다
하나의 버전이 만들어지는 과정
1. 작업 디렉터리 내에서 변경 사항 생성
2. 스테이지로 git add <파일명>
3. 저장소로 git commit -m "커밋 메세지"
로컬 저장소를 만드는 명령어
.git 숨김폴더가 생기는걸 볼수 있다
안뜨시면 설정 들어가셔서 숨김폴더 보이도록 설정 해주시면 됩니다.
git rm => 원격 저장소와 로컬 저장소에 있는 파일을 삭제한다.
git rm --cached => 원격 저장소에 있는 파일을 삭제한다. 로컬 저장소에 있는 파일은 삭제하지 않는다
작업 디렉터리 상태를 확인 할 수 있다작업 디렉터리 상태를 확인 할 수 있다
git add로 파일을 추가해고 git commit 치면
commit 메세지를 치는 창이 뜨는데
첫번째줄은 제목
세번째줄은 본문
넣어주면 된다.
git add . 모든 변경사항을 추가하고 싶을 때
git commit -m "< commit message >" 방법도 있는데
전자 방법(git commit -> 제목 + 본문)이 좀 더 디테일하게 작성해서 더 좋은 방법입니다!!
commit한 기록 보기
commit log를 간단하게 한줄로 보는 방법
각각의 커밋의 대한 변경사항을 볼수 있다
내가 최근에 만든 commit과 현재 작업디렉토리를 비교(어떤 작업을 했는가
단 git add 해주면 git diff에 조회 불가
->작업 디렉터리랑 저장소를 비교하기 떄문에
스테이지이랑 저장소랑 비교하는법
git diff
순서가 중요 -> 바뀌면 뒤 바뀌는 상황이 나옴...
<이전 커밋> <최신 커밋> 이 순서로 해주면 된다
<#3><#4>
<#2><#3>
나뭇가지가 가지를 치듯이 버전이 여러갈래로 버전을 만들수 있다.
브랜치는 버전의 분기
합칠떄 문제 발생
쇼핑몰 코드
A: 장바구니 기능 추가
B: 주문목록 기능 추가
같은 코드를 다르게 수정한 부분 혼재 == 충돌
-> 충돌 부분 하나 하나 모두 수작업으로 수정 해줘야 함 그래서 충돌 부분 하나 하나 모두 수작업으로 수정 해줘야 함
다른 예시)
요구사항이 쌓을수록 브랜치로 해결을 하기 쉬워진다!
브랜치로 버전의 분기를 관리하는 방법
브랜치를 나눈다
각자의 브랜치에서 작업한다
(필요하다면) 나눈 브랜치를 합친다
체크아웃 되어 있지 않는 상태에서 삭제를 할 수 있다
같은 부분을 다르게 수정한 부분
a.txt에서
10번째 줄에 A는 X B는 Y로 수정했을 경우
서로의 작업과 관련 없는 부분은 충돌없이 병합이 된다!!
하나의 요구사항이 생기면 하나 브랜치를 만들어서 작업한다
두개의 요구사항이면 두개의 브랜치!!
위에 사진을 직접 보여주기 위함이다
master에선 foo의 foo_a.txt를 볼수 없다
Head는 포인터(가리키는 것)
master 2번 커밋으로 head 바꿀수 있는데 (권장하지 않음 -> 오류발생할수 있음)
bar 브랜치로 checkout 해주면 bar의 가장 최근 커밋으로 Head가 가르킨다.
체크아웃 -> 해당 브랜치 돌린다
합치면
병합에는 크게 두가지 방법
1. 새로운 커밋을 만들지 않는다 -> 빨리감기 병합
master는 foo가 커밋될동안 가만히 있었고(어떠한 커밋도 없었다) foo를 병합하면 마치 빨리감기하듯 그조 foo 브랜치에서 추가된 커밋을 반영하기만 하면 된다
마스터 브런치로 바꾸고
병합 해주면 Fast-forward(빨리감기)
2번 방법 환경 만들기
git merge하면 commit하는 창이 뜬다!!
상황1:
최종적으로 어떤걸 최종 반영할지 본인이 직접 해결!!(코드를 보고!)
커밋 수정하기
git commit --amend
vi a.txt > a
git add a.txt -
git commit -m "first commit"
git branch foo
git checkout foo
vi a.txt -> b
git add a.txt
git commit -m "ffoo commit"
git checkout master
vi a.txt -> c
git add a.txt
git commit -m "master commit"
git merge foo
master는 c foo는 b 로 되어 있어서 충돌이 일어난다.