ls -al : 숨겨진 파일 보기
git init : git 시작. 현재 프로젝트에서 변경사항 추적(버전 관리)을 시작
git status : 현재 파일 상태 보기
git add <파일명> : commit 대상으로 설정. 변경사항을 추적할 특정 파일을 지정
git add . : 모든 파일 commit 대상으로 설정
git reset: add 취소하기
git commit -m <메세지> : commit 생성
git log —oneline : 한 줄로 commit 조회
git branch : 내 브랜치 조회
git push origin <브랜치> : 원격지에 해당 브랜치 커밋 올리기
git pull origin <브랜치> : 원격지 코드 받아오기
git remote add origin <github Repo URL> : origin이라는 이름으로 원격 저장소 추가
git checkout <HASH> : 해당 커밋으로 이동
git checkout <branch> : 해당 브랜치 최신 커밋으로 이동
git diff : 변경사항 보기
git stash push : 변경사항 임시 저장
git stash list : 임시 저장 리스트 조회
git stash pop : 마지막에 추가한 변경사항 꺼내기 
# 개행문자(NewLine) 설정
## macOS
git config --global core.autocrlf input
## Windows
git config --global core.autocrlf true

**# 사용자 정보
## 커밋(버전 생성)을 위한 정보 등록**
git config --global user.name 'Youre_Name'
git config --global user.email 'Your_Email'

**# 구성 확인
## Q키를 눌러서 종료**
git config --global --list

**# 깃허브 원격 저장소에 내 파일 연결하기**
git remote add origin <깃허브 레퍼지토리 링크>
git push origin master

**# 깃허브 원격 저장 종료하기**
git remote rm origin
**# 각 개발 기능별로 브랜치 나누기**
# 메인 브랜치(main)는 있는 상태로 각 개발자가 자신이 맡은 부분의 브랜치를 새로 생성한 후에 기능 개발이 완료되면 메인 브랜치로 병합함 (merge)

**# 로컬 저장소 브랜치들의 목록**
git branch

**# 원격 저장소에 연결된 브랜치들의 목록**
git branch -a

**# 만들고자 하는 브랜치 명을 뒤에 입력하면 새로운 브랜치가 생성됨**
git branch <브랜치 명>

# 브랜치 생성후, 원격 저장소에도 연결하고 싶으면
git push origin <브랜치 명>

**# 변경하고자 하는 브랜치로 바꾸기**
git switch <브랜치 명>
# ~~git checkout <브랜치 명>~~
--> 기능이 너무 많아서 checkout 대신에 switch와 restore이 나오게 됨

# 브랜치를 만들면서 브랜치 변경
git switch -c <브랜치 명>

**# 원격 브랜치와 같은 이름으로 로컬 브랜치를 생성하고 스위치**
git switch -t origin/<브랜치 명>

**# 작업중인 파일(변경 내역이 있는)을 복원**
git restore .
git restore <파일 명>

**# stage된 파일 복구**
git restore --staged .
git restore --staged <파일 명>

**# 생성한 브랜치를 원격 레퍼지토리에 push**
git switch <브랜치 명>
git push
**# 처음에 push를 하면 오류 발생**
#로컬 저장소를 원격 저장소로 처음 push할때는 --set-upstream 옵션을 줘야 함
#그래야 트래킹 정보 설정이 되어서 git push만 해도 push가 된다.
git push --set-upstream origin <브랜치 명>
git push -u origin <브랜치 명>

# signin 이라는 이름의 브랜치에서 폴더 signin을 만들고 main 브랜치로 바꿈
# 그러면 main 브랜치인 상태에서는 signin 폴더가 사라져있다.g
# 현재 접속(?)중인 브랜치에서 뭔가를 바꾸면 다른 브랜치에 영향을 주지 않는다.

**# 로컬 브랜치 삭제**
git branch -d <브랜치명>

**# 원격 브랜치 삭제**
git push origin --delete <브랜치명>

# 브런치 삭제가 안될때, 사용
## 원격, 로컬 모두 삭제되는 듯
git branch -D <브랜치명>

**# 버전 관리 - 버전 되돌리기 (Reset)**
**# 현재 버전 3**
git reset --hard HEAD~1
## HEAD는 가장 최신 버전을 뜻함.
## HEAD~1은 가장 최신 버전에서 뒤로 한번 이동하겠다는 뜻 = **전 버전 불러옴**
## 따라서 현재 버전 2

git reset --hard HEAD~1
# 여기서 한번 더 뒤로 되돌리면 처음에서 2번 뒤로 이동한 버전이 됨.
## 버전 1

git reset --hard ORIG_HEAD
## 기존의 헤드로 이동함 = **되돌리기 전으로 되돌림**
## 버전 2가 됨

git reset --hard HEAD~2
## 가장 최신버전에서 **2개 뒤로 이동함**
**# 깃허브 .DS_Store 파일 충돌 발생
# .DS_Store 파일 삭제하는 법**

# 터미널에서 repository local폴더로 이동 (충돌이 발생하는 로컬 폴더)
# 이동 후, 다음과 같이 입력

# .DS_Store 파일이 삭제 
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f
# .gitignore에 추가하여 다시 commit이 되지 않도록 해야 함.
echo .DS_Store >> .gitignore
# 위의 방법 말고도, nano로 파일을 만들고 .DS_Store 라고 적힌 라인을 추가해도 됨
# 그리고, 이미 .gitignore 파일이 있다면, .DS_Store라고 적어주면 됨.

git add .gitignore
git commit -m ".DS_Store is banished"

# 터미널에서 git status를 하면 정상적으로 돌아오는 것을 확인할 수 있음.

[Git Hub]깃허브 .DS_Store 파일 개념 및 삭제 방법

**# failed to push some refs to에 대한 해결방법**
# 해당 오류는 push를 할때 발생하는 오류
# 오류 발생 원인은 원격 저장소와 로컬 저장소의 상태가 달라서 나는 오류
# pull을 먼저 해주어 둘의 상태를 같게 한 다음에 push를 해주면 됨.
git pull origin <브랜치명>

## vsc 터미널을 사용할 경우, 위 명령어를 사용했을 시 파일 내용을 수정할 수 있도록 함.
## 원하는 것으로 수정후 (필요 없는 건 저장, 완전 새롭게 변경해도 됨)

## pull한 후, push를 하면 정상적으로 됨.

## 많이 수정을 하지 않아서 이전 버전으로 되돌려도 될 경우,
git reset --hard HEAD~1
## 이전 버전으로 되돌린 후 pull을 하고 push를 함.

**# pull을 했을 때, 이상한 창(?)의 형태로 이동되었다면,**
Please enter a commit message to explain why this merge is necessary, especially if it merges an updated upstream into a topic branch
# 위와 같은 멘트가 떴을 때의 해결 방법

**## i를 누른다 (commit message를 입력하기 위해서)
## merge에 대한 mesaasge를 입력. 빈 공간에 메세지 입력하면 됨
## esc키를 누름
## :wq를 입력 (진짜, :wq를 입력하면 됨)
## enter키를 누르면 이상한 창(?)에서 탈출하면서 정상적으로 pull이 완료됨**.

# 위와 같이 이상한 창이 뜨는 이유는 왜 해당 merge가 필요한지 메세지를 남기기 위해서

git 기본 명령어, failed to push some refs to에 대한 해결방법

[개발툴] Please enter a commit message to explain why this merge is necessary, especially if it merges an updated upstream into a topic branch 해결하기 (git bash)

**# pull과 clone의 차이점**

**# git clone**
## git clone 명령을 사용하면 로컬 저장소의 내용이 원격 저장소의 내용과 일치
## 기존에 작업중이었던 사람이 git명령을 사용해서 원격 저장소의 내용을 그대로 가져오면 기존에 작업했던 내용들은 직접 복구해야 함.
## 즉, git clone은 프로젝트 처음에 투입될때 사용해야하는 명령

**# git pull**
## git pull 명령은 원격 저장소의 내용을 가져와서 현재 브랜치와 병합(merge)까지 함.
## 기존에 작업했던 내용은 유지하면서 최신 코드로 업데이트 할 수 있음.
## 병합과정의 포함으로 인해 pull을 하기 전에 commit을 하지 않으면 덮어쓰기 에러(두 브랜치간의 내용이 달라서 충돌)가 발생.
## 기존 작업에 대한 commit을 미리 해두고 pull을 수행해야 함.
 
# 원격 연결 한 후, 원격 브랜치 연결이 안될때 다음과 같은 오류

fatal: invalid reference: <브랜치명> 

# pull을 먼저 해준다
git pull

# 다음과 같이 업데이트 됨.
From <https://github.com/InQ-InQ-InQ-InQ-InQ/webtoon-moa>
 * [new branch]      Backend    -> origin/Backend
 * [new branch]      Frontend   -> origin/Frontend
Already up to date.

# 다시 switch하면 변경 완료
git switch <브랜치명>
# 내가 만들어둔 폴더와 github 레포 연결하기

# 해당 폴더로 이동
cd <폴더 경로>

# .git 파일 만들어주기
git init

# 깃허브 레포와 연결
git remote add origin <깃허브 링크>

# 잘 연결되었나 확인
git remote -v