git이란
내가 사용하기 쉽게 코드를 저장해 놓고 여러 버전으로 작업할 수 있게 해주는 툴
git 사용법
설치
- mac의 경우, 터미널 창에 brew install git을 입력하여 깃을 다운 받는다.
- IDE : Visual Studio Code를 사용한다
- 소스트리 다운 (명령어를 단축키로)
사용법
1. VS Code에 폴더를 연다.
- 해당 폴더에 파일을 여러개 넣은 후, 터미널 창을 열어 명령어를 입력한다.
git init
git config --global user.name "이름"
git config --global user.email "이메일"
3. Source Tree사용
로컬 저장소 생성으로 해당 폴더를 가져온다

이때 자신의 github 계정을 연결해준다

4. 타임캡슐에 시점 저장하기
자신의 현재 폴더 상태를 저장해서 언제든지 이 시점으로 돌아올 수 있게 한다.
- git status : 상태 확인
상태를 확인해 보면 아직 저장되지 않은 파일들이 있는 상태이다.

-
git add -A : 이곳의 모든 것을 깃에 담는다
아래와 같이 모든 파일이 담긴 것을 확인할 수 있다

-
git commit : 캡슐을 묻을 때 사용
git commit -m "first commit" -> 뒤에 커밋의 상태를 알려주는 문장을 입력해 둔다(어떤 커밋인지 알기위함) 그리고 상태를 확인하면 이제 묻을 게 없다고 나온다!

-
소스트리에서도 확인가능!
(커밋된 것을 확인 할 수 있다)

5. 소스트리 사용해보기
6. Reset, 과거로 돌아가기
- 과거 시점에 돌아갈때, 그 이후것은 모두 없애고 미련없이? 가는 방법이다
git reset 6005ee --hard
(일련번호는 git log를 통해 나오는 앞 6자리만 꺼내 입력시키면 된다)

그럼 위와 같이 마지막에 현재 어떤 시점인지 보여준다.
7. Revert, 취소할 시점으로 돌아가기
- 위와 마찬가지로, 과거로 돌아가는 것은 같지만 해당 시점으로
git revert 6005ee
아래와 같이 새 커밋 메세지를 작성하는 창이 뜨면 그대로 저장한다(vi, :wq)

소스트리 창에는 새로 만든 시점이 뜬다.

시점을 기준으로 커밋 되돌리기 등을 할 수 있게 된다!
8. Branch, 평행우주 넘나들기
- branch는 가지라는 뜻으로, 현재 시점에서 두가지 미래를 만들어 분리하겠다는 것, 회사에서 관리하는 파일들을 마음대로 변경하지 못할 경우, 새로운 시도를 하고 싶다면 내가 변경할 수 있는 가지를 만들어 그 안에서 자유롭게 수정할 수 있게 한다!
git branch my-idea : 새로운 가지 생성
git checkout my-idea : 새로운 가지로 이동하기

이제 파일을 마음대로 변경해도 이전에 쓰던 git checkout master 를 입력하면 원래 상태로 돌아갈 수 있다!
- 소스트리에서도 상태를 볼 수 있다 (브랜치 2개 중에 현재 어디에 있는지 확인)

- 또 하나의 가지 생성 (my-another-idea)
이전에 만든 my-idea에 파생된 브런치를 하나 더 만들어서 수정하면
my-idea의 모든 파일들이 가져와서 작업될 수 있다!


9. Merge, 다른 우주에서 가져오기(병합)
위의 두가지 가지에서 나온 변화를 master로 가져오기 위해서 수행해야 할 작업
1. master 브랜치로 변경한다 : git checkout master
2. 변화를 가져오고 싶은 브랜치의 이름을 적는다 : git merge my-another-idea
3. mac의 경우 바로 저장되지 않는다면 :wq로 저장시키고 나간다.
모든 작업을 보고 싶다면, git log --graph --all --decorate를 통해 로그로 시각화된 두 분기의 브랜치 변화를 볼 수 있다
- 주의!! 같은 파일을 변경한다면 merge 에 충돌이 일어날 수 있다
- 소스트리에서는 master의 위치에서 병합할 브랜치에 우클릭으로 병합하기가 가능

10. Rebase, 다른 우주에서 병합하기(재배치)
하나의 줄기로 통일 시켜 보이고 싶을 때, git rebase my-another-idea로 통일된 줄기가 보여진다.
- 다 쓴 브랜치 삭제 시
git branch -D (브랜치명)