2 minute read

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

image

위 그림과 같이 원격 저장소 main과 로컬 main이 있다고 했을 때, fetch 명령어를 실행하면 FETCH_HEAD 가 임시로 생성된다. 이 때, FETCH_HEAD와 로컬 main을 merge하면 아래와 같이 병합된다. C+D+E+F가 합쳐진 내용으로 새로운 커밋M이 생성되고, 원격으로 푸시하면 아래 그림과 같이 된다.

image

pull은 로컬에 비해 원격 저장소에 더 최신 내용이 있을때 사용하면 편리하며,
fetch & merge는 원격과 로컬 모두 최신 내용이 있는데 두 내용이 다를 때, fetch를 통해 이를 비교하고, merge 하는 방법으로 사용할 수 있다.

Tags: ,

Categories:

Updated: