Do it 깃 & 깃허브 입문 이고잉 강사님 특강 1
1회차: 깃헙 활용 방법(개인 위주) + 협업에 대한 그림 <버전을 만드는 것이 주요 목표>
1) 프로젝트 폴더를 만든다.
2) 폴더를 저장소로 지정한다. (git init)
3) 파일을 수정한다.
4) 커밋에 포함시키고 싶은 파일을 스테이지로 등록한다. (git add)
5) 커밋한다. (git commit)
6) 시간 여행을 해본다 (HEAD를 옮긴다. => git checkout)
7) 시간 여행을 끝낸다. (git checkout master)
8) 버전을 취소한다. (master를 옮긴다. => git reset --hard )
9) 버전을 복구한다. (작업 내역을 조회한다. => git reflog)
10) 실험적인 작업을 시작하기 위해서 브랜치를 만든다(git branch exp)
[버전관리]
버전관리의 극단적인 예시 : 마지막.txt, 진짜마지막.txt, 진짜마지막.txt... ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
=> 버전관리를 할 줄 알면 삶의 질이 달라진다
버전관리를 안한다면 -> 버그가 있을 때 코드 전체를 전수 조사해야한다
버전관리를 한다면 -> 프로젝트를 과거로 돌리고 실행 과거를 돌리고 실행하다 버그가 없는 곳 까지 복귀할 수 있다
깃은 위험한 녀석이다 -> 내 작업한게 날라가는 경우도 있음
<git 설치 확인하는 방법>
VSC 켜기 -> 터미널 -> New Terminal -> git이라 입력 (뭔가 주르륵 나오면 성공)
(명령어들 같은 것 들이 나옴)
파일을 vsc에 드레그 앤 드롭 하면 vsc 내에서 파일을 열 수 있다
<저장소 repository 만들기>
git init
source control -> GuI 껍데기 들이 여기 있다
<User 이름 설정>
git config --global user.name "SeongJong"
<User 이메일 설정>
git config --global user.email "tmdwhd619@gmail.com"
--global : 현재 컴퓨터에 있는 모든 저장소에서 같은 사용자 정보를 사용하도록 설정
git : 깃아!
config : 일해라!
<깃 상태 확인>
git status
project folder = Working dir(사람의 영역) + repository(머신의 영역)
working dir에서 add 를 하면 stage Area(장바구니라 생각) 에 저장하고
commit을 하면 stage Area 에서 repository로 간다
(프로젝트를 부분별로 commit 하고 싶을 때 사용)
즉
add : Working directory -> Stage Area
commit : Stage Area -> Repository
Stage Area = index = cash

<버전들의 상태를 보고 싶을 때>
git log
- 지금까지 만든 버전을 터미널에서 볼 수 있다
(확인 할 때는 위아래 화살표 , 빠져나올 때는 q)
git log --oneline
git log --oneline --all
git log --oneline
- 이건 더 깔끔하게 버전을 볼 수 있음
git log --oneline -all
- 전부 보고 싶을 때(master까지)
Head는 디폴트 적으로 master로 설정되어 있다
commit을 하면 parent는 master를 따라간다, master는 가장 최신 버전을 가르킨다
*각각의 버전은 그 버전이 만들어진 시점의 stage area의 snapshot이다*
master는 마지막 작업을 가르킨다, head는 현재 작업을 가르킨다
(그래서 타임 여행이 가능한거임, master랑head랑 다른 곳을 가르키면 시간여행 중인거임)
시간 여행 코드
ex) git checkout c12554we
git checkout <commit id>
master로 돌아 가고 싶을때 (시간여행을 마치고 싶을 때)
git commit master


이랬을 때는 새로운 버전을 commit 했을때
master가 움직이는 것이 아닌 현재버전을 가르키는 head가 직접 움직임
-> detached Head state가 되어 버려!!(경고 문구가 뜨긴 함)
(head가 master를 가르키면 attached Head state)
(이래서 checkout master를 써야한다)


멘탈 터지는 상황
마지막 버전으로 checkout으로 끝내고
새로운 버전 E를 만들어서 다음과 같은 상황이 되었을 때
어?? master가 다르네
git checkout master 하는 순간??? -> E버전아... 잘가요...사요나라....ㅠㅠ
방법이 없을까...?
Git은 어떤 버전도 버리지 않고 수정하지 않는다 (어딘가에는 있음)
심지어 수정할 때는 복제해서 복제본을 바꿈
그래서 위의 같은 상황에서 그냥
git reflog
git checkout <commit id>
git reflog로 E 의 commit ID를 찾은 다음(혹은 전 버전을 잘 살려내서)
git checkout E commit ID로 살려내면 된다
이딴 걸 대체 왜 안 막는 걸까??
실험 , 신기능 등을 돌려 볼때 굉장히 유용하긴 함ㅋㅋㅋㅋ
master 고정 시키고 head 옮겨가면서 테스트 하면서 하다가 ㅈ됐다 싶으면 head를 master로 옮김
*결론*
과거로 가고 싶다 git checkout <commit ID>
현재로 돌아 오고 싶다 git checkout master
어우 근데 commit ID 가지고 놀기 너무 빡셈 ㅠㅠ (닉네임을 지어줬으면 좋겠다)
-> 그래서 branch가 나옴
<Branch>
Git의 혁신적인 측면
Master를 따로 두고 Master를 건들지 않은 상태에서 Branch를 통해 작업을 할 수 있다
끝났을 때는?
exp가 master를 병합한다 => master를 업데이트 한다.(main작업을 exp에서 업데이트, 자주할 수록 좋다)
master가 exp를 병합한다. => 실험이 끝났다.(한번만 한다)
exp를 master와 주기적으로 하지 않으면 나중에 합칠때 충돌이 많이 일어난다
실험이 끝나고 성공적이면 master가 exp를 병합하면 된다
-> master가 병합을 하므로 head는 master를 가르켜야하고
병합할 exp에 우클릭을 하면 merge into current branch를 클릭하면 된다
(이러면 새로운 버전이 만들어지고 Parent는 master와 exp이다)
이걸 취소하고 싶으면 Reset current branch to this... 클릭하고 Hard를 선택
그래서 중급자가 되고 싶으면 head와 branch를 마음대로 움직일 수 있어야함
<복습하는 방법> -> 아침,저녁으로 연습하자
1. 프로젝트 폴더를 만든다.
2. 저장소를 만들기
git init
3. 파일을 만들어 본다
work1.txt => 1
work2.txt => 2
work3.txt => 2
git status
git add FILE NAME
git commit -m "COMMIT MESSAGE"
=> 커밋 메세지는 파일 명이 아니라 저장하는 닉네임이라 생각하면 된다
<실습>
git add work1.txt
git commit -m "work 1"
git add work2.txt work3.txt
git commit -m "work 2"
git log --oneline --all
4. 시간 여행 해보기
git checkout COMMIT ID
git checkout master
<실습>
git checkout 9e9892b
git checkout master
5. 브랜치만들기
git branch exp
: 현재 head가 가르키는 새로운 버전의 branch 생성
주의 : branch를 만들었다고 해서 head가 exp를 가르키는 건 아니다 (따로 처리해야 한다)
exp에서 작업할 수 있도록 체크아웃 해주기
git checkout exp
<실습>
git checkout master
git branch exp
git checkout exp
6. 서로 다른 브렌치에서 작업한다
exp branch에서 exp. txt파일을 만들고
master branch에서 master.txt파일을 만들고 커밋
<실습>
git checkout exp
git add exp.txt
git commit -m "exp 1"
git checkout master
git add master.txt
git commit -m "master 1"
7. master에서 exp를 병합하기
git merge exp
(vi editor : wq를 이용해서 내용을 저장한다)
<실습>
git merge exp
앞으로 배울 거
-m 과 - am의 차이점
'IT Study > Git' 카테고리의 다른 글
| [Git] 서로 다른 로컬저장소에서 서로 다른 파일을 수정 (0) | 2022.10.24 |
|---|---|
| 2시간은 제발 이해하자 (0) | 2022.10.20 |
| [Git] 이고잉 강사님 특강 (1~2) 복습 & 정리 (0) | 2022.10.20 |
| [Git] Github를 통한 협업 방법 (0) | 2022.10.20 |
| [Git] Branch와 3 Way merge (0) | 2022.10.19 |