1장. 깃과 깃허브란?
깃(Git)
: 버전 관리 도구(최종본, 최최종본... 이런 거 안 하기 위한)
: 파일의 변경 사항을 추적하고, 필요할 때 과거 상태로 되돌릴 수 있음
: 분산형 구조 (중앙 서버 없어도 사용 가능)
깃허브(GitHub)
깃의 원격 저장소(온라인 저장소): 깃 파일 백업 공간 제공
깃은 로컬, 깃허브는 클라우드
ex. A가 작업한 파일을 깃허브에 올리면 B가 다운받아 사용 가능
=> 버전 관리, 백업, 협업 가능
기본적인 리눅스 명령
현재 디렉토리 살펴보기
: ~ 가 나타난다면 홈디렉토리라는 뜻
1. pwd: 현재 위치
$pwd
2. ls: 현재 디렉토리에 어떤 파일 또는 디렉토리가 있는지 확인
$ls
-a: 숨겨진 디렉토리도 표시
-l: 파일/디렉토리의 상세 정보 모두 표시
-r: 파일의 정렬 순서 거꾸로 표시
-t: 파일 작성 시간순으로 표시
3. 터미널 창 지우기
$clear
4. 상위 디렉토리로 이동
$cd ..
5. 하위 디렉토리로 이동
: 이동할 하위 디렉토리의 이름
$cd name
6. 홈 디렉토리로 이동
$cd ~
7. 디렉토리 생성
$mkdir
8. 디렉토리 삭제
$rm -r test
9. 터미널 삭제
$exit
2장. 깃 설치와 기본 설정
git init
$git init

- 현재 폴더를 깃 저장소로 사용하기 위해 초기화
- .git 폴더가 생성됨 -> "저장소"
버전 만들기

- 스테이지: 버전으로 만들 파일들이 대기하는 장소 -> 버전 4개면 스테이지 4개
- 저장소: 스테이지에서 대기하던 파일을 버전으로 만들어 저장
<git add>
: 작업트리 -> 스테이지
쉽게 말해, 임시저장하는 것이라고 보면 된다.
$git add .

<git commit>
: 스테이지 -> 저장소
쉽게 말해, 진짜로 새 버전을 올린다는 것이다.
$git commit

(실습)비주얼 스튜디오 코드에 작업 폴더 연결
비주얼스튜디오에 아까 만들어 놓은 저장소 .git 파일을 드래그해 업로드하면 된다. -> 작업 폴더로 추가됨

hello.txt라는 문서를 만들고 내용 저장

untracked files라고 하는데, add를 해야 한다는 것이다.
즉, 지금 상태는 다음과 같다.

<add>


add 완료한 지금 상태다.
<commit>

그럼 다음과 같이 commit할 것 없음이 뜬다.

<git log: 저장된 버전 확인>

저장한 "message 1"이 출력된다.
<스테이징, 커밋 한 번에 하기>


ㄴ add와 commit이 한 번에 된 게 보인다.

3장. 브랜치 알아보기
브랜치가 필요한 이유
<버전관리를 위해 필요>
google과 apple 모두에게 서비스를 제공해야 한다고 할 때 공통된 부분은 중복이 발생
<수정할 때 용이>
* 브랜치: "최신 커밋된 부분을 가리키는 포인터"
* 분기
: 새로 추가하는 기능이나 코드 수정 사항은 새 브랜치로 만들어 작업 가능

* 병합
: 기존 메인 코드에서 브랜치를 따로 만들어 기능 추가하거나 오류 수정 후 그 브랜치 안에서 모든 것이 해결되면 main 브랜치에 병합

실습
1. 새 폴더 만들고 초기화
$git init
2. 다음과 같이 txt 파일 만든 후

3. 커밋 메시지는 "work 1"으로 지정
$git add work.txt
$git commit -m "work 1"
4. 그럼 다음과 같이 git log 내용을 확인할 수 있다.
(Head -> main): "HEAD가 현재 main이라는 브랜치를 가지고 있다."
=> (HEAN -> main)이 최신 커밋

5. 더 커밋해보자
$git commit -am "work 2"
$git commit -am "work 3"


새 브랜치 만들기
<git branch: 브랜치를 만들거나 확인>
$git branch

여태껏 Main에서 작업 중이었음
<git branch 브랜치명: 새로운 브랜치 만들기>
$git branch 브랜치명

log화면을 보자.

위처럼 (HEAD -> main, apple) 로 바뀌었다.
저장소에 main과 apple 두 개의 브랜치가 있고 현재 작업하는 브랜치는 main이라는 뜻이다.
추가로 해보자. 다음과 같이 google, ms라는 브랜치를 추가하면

main 브랜치뿐 아니라 ms, google, apple 브랜치에서도
최신 커밋은 "message 2" (앞에 부분 실습 안 해서지, 했으면 "work3"일 것이다.)

다음과 같이 txt 파일에 "main work4"라는 메시지를 커밋하면

다음과 같은 log 확인 가능

너무 장황하니까 --online 옵션을 주고 보자
$git log --online


main work4는 main 브랜치에만 적용되어 있고,
apple과 google, ms 브랜치는 아직 message2 커밋 상태
=> 새로 만든 커밋은 현재 브랜치에만 적용되고 나머지 브랜치에는 적용되지 않음 !! => 버전 관리에 용이 !!
브랜치 전환하기
$git switch

"HEAD -> apple" 을 보아 작업 브랜치가 apple로 바뀐 것을 알 수 있다.
전환한 브랜치에서 커밋하기
apple 고객사 고객들만을 위한 apple.txt 를 따로 만들어준다.


git add와 commit을 해준다.

apple로 메인 브랜치가 전환되었고, 최신 커밋은 "apple work4"

브랜치와 커밋 관계 알아보기
<git log --branch: 브랜치마다 최신 커밋 보여줌>

현재 브랜치: apple
최신 커밋: apple work4
main 브랜치의 최신 커밋: main work4
ms 브랜치와 google 브랜치의 최신 커밋: message2
<git log --graph: 그래프로 표현>
빨간색 수직선은 커밋과 커밋 간 관계를 보여줌
"apple work4 커밋의 부모를 찾아가면 message2이다"
"main work4 커밋의 부모를 찾아가면 message2이다."
=> main브랜치와 apple브랜치는 message2커밋까지는 같고 그 이후부터 버전에 따른 다른 커밋 존재한다는 뜻..

<git log ..: 브랜치 간 차이점 보여줌>
다음은 main 브랜치에는 없지만 apple 브랜치에만 있는 커밋 보여줌
=> "apple work4"

브랜치 병합하기
새로운 파일을 만들고 work.txt 를 만들어 1 저장
$git add "work.txt"
$git commit -m "work1"

"o2"라는 브랜치를 추가하면
$git branch o2
다음 그림처럼 main과 o2 모두 "work1" 이라는 커밋 가지고 있음








현재 브랜치: o2
o2의 최신 커밋: o2 work2

git status
git status
- 현재 파일 상태 확인 (수정됨, 추가됨, 커밋 안됨 등)
git diff
git diff
- 워킹 디렉토리와 스테이징 영역의 차이 확인
git diff --staged
- 스테이징 영역과 마지막 커밋의 차이 확인
커밋 로그
git log
- 커밋 히스토리 출력
git log --oneline