[Git] 깃 기본 명령어 정리
Git 초기화 및 푸시
git init
git branch -m main
git remote add origin "~/~/~.git(경로)"
git add .
git commit -m "Comment"
git push -u origin main
커밋 로그 보기
git log
그래프로 보고 싶다면
git log --graph
git log --graph --oneline
**작업 전에 Pull하고 작업 후 Commit 하고 Push 하는 것 잊지 말자
깃 브랜치 생성/삭제
git checkout -b <branchName>
git branch -d <branchName>
브랜치에 병합되지 않은 수정 사항이나 커밋이 남아있는 경우는 -d
를 쓰면 에러가 발생한다. 해당 브랜치만 가지고 있고, 다른 브랜치가 저장하고 있지 않은 커밋을 실수로 지우는 것을 방지하기 위함이다.
이런 경우에 강제로 지울수 있는 명령어도 있다.
git branch -D <branchName>
원격 브랜치 삭제
git push origin -d <branchName>
깃 수정사항 되돌리기/리셋하기(restore, clean)
현재 브랜치의 상태/파일들/변경사항들을 보고 싶으면 git status
명령어를 입력해서 볼 수 있다. 이 때 이미 커밋된 파일을 수정한 경우는 Changes not staged for commit
으로 표시되고, 새로 생성 및 추가한 파일은 Untracked files
으로 표시된다.
첫번째 경우처럼 커밋된 파일에 적용한 변경사항을 되돌리고 싶다면 아래 명령어를 사용하면 된다.
git restore <files>
//혹은
git restore .
두번째 경우처럼 현재 브랜치에서 작업한 혹은 변경사항이 있는 내용을 커밋 혹은 스테이징하기 전에 모두 없애고 되돌리고 싶을 때 untracked files들을 지워줄 수 있다.
git clean -fd
추가로, reset
은 스테이징된 커밋을 되돌리는 명령어이고, restore
은 커밋 전 파일의 수정사항을 되돌리는 명령어이다.
깃 stash
스태시를 사용함으로써 변경내용을 임시 저장할 수 있다. 나는 주로 한 브랜치에서 작업하다가 잠시 다른 브랜치로 넘어갈 일이 있을 때 스태시 해놓고 움직였다가 돌아온다.
git stash
git stash list // 스태시 목록을 볼 수 있다
git stash pop // 스택 맨 위의 저장 내용을 가져온다
git stash apply <StashNum> // 원하는 작업을 가져온다
git stash drop // 스택 맨 위의 저장 내용을 가져오고 목록에선 지운다
깃 pull / fetch 차이점
fetch
는 원격저장소에서 변경된 내용이나 사항을 확인하는데 쓰인다. pull
은 이를 확인하고 로컬로 가져오는 것까지 수행한다.
git pull origin <branchName>
둘의 차이는 MERGE에 있다. pull
은 최신 커밋들을 내려받아 자동으로 로컬에 병합하고, 중간에 충돌이 나면 충돌을 처리해주면 된다. 그러나 fetch
는 최신 내용(커밋)을 이름없는 임시 브랜치FETCH_HEAD
로 내려받고 merge는 하지 않는다. 따라서 병합하라는 명령을 또 실행해주어야 한다.
fetch + merge == pull
위 그림과 같이 원격 저장소 main과 로컬 main이 있다고 했을 때, fetch 명령어를 실행하면 FETCH_HEAD 가 임시로 생성된다. 이 때, FETCH_HEAD와 로컬 main을 merge하면 아래와 같이 병합된다. C+D+E+F가 합쳐진 내용으로 새로운 커밋M
이 생성되고, 원격으로 푸시하면 아래 그림과 같이 된다.
pull
은 로컬에 비해 원격 저장소에 더 최신 내용이 있을때 사용하면 편리하며,
fetch
&merge
는 원격과 로컬 모두 최신 내용이 있는데 두 내용이 다를 때, fetch를 통해 이를 비교하고, merge 하는 방법으로 사용할 수 있다.