git init
: 해당 시점부터 git이 파일 생성, 코드 작성하는 등 변동사항을 추적
git add 파일명
: 해당 파일을 staging
git add .
: 모든 파일을 staginggit add 파일명1 파일명2
git status
: 지금 변경된 파일, 스테이징된 파일 등을 알려줌
git restore --staged
: 스테이징된 파일을 취소
git commit -m '메세지'
: 커밋, 변동사항 기록
git log
: commit 기록을 한 눈에 확인
HEAD
는 현재 브랜치이다.--all
: 현재 브랜치뿐만 아니라 모든 브랜치의 커밋기록을 보여줌--oneline
: 한 줄에 간략하게 출력 (많이 쓴다)--graph
: 그래프로 그려준다 (브랜치 여러개 있을 때 가독성 ⬆️)git diff
: commit 하기 이전과 현재 코드가 어떤 차이가 있는지 알려준다.
git diff 커밋id
: 특정 커밋과 현재 파일을 비교git diff 커밋id1 커밋id2
git difftool
: diff와 동일, diff보다 훨씬 보기 편함
커밋id1,2 이런거 당연히 가능
사실 diff, difftool 보다는 VSCode의 Extension을 씁니다.
git branch 브랜치명
: 프로젝트 사본이 하나 생성 (브랜치 생성)
git branch -M main
: 기본 브랜치 이름이 main으로 변경
git switch 브랜치명
: 해당 브랜치로 이동
git merge 브랜치명
: 두개의 branch를 합친다. main에다 합치고 싶으면 main 브랜치로 이동한 상태에서 브랜치명에 합칠 브랜치 입력
일반적인 merge, merge의 기본 동작 방식이다.
기준이 되는 브랜치(main/master)에는 신규 커밋이 없는 경우
합칠게 없어서 신규 브랜치에게 main이라고 하는 것
강제로 3-way merge를 하고 싶을 경우 git merge --no-ff 브랜치명
명령어를 사용한다.
rebase
는 브랜치의 시작점을 다른 commit으로 옮겨주는 행위!
rebase를 사용해 신규 브랜치의 시작점을 main브랜치 최근 commit으로 옮긴 후 fast-forward-merge하는 방식 (강제 fast-forward)
git switch 새로운브랜치
git rebase main
git switch main
git merge 새로운브랜치
모든 브랜치를 3-way merge 할 경우 그래프가 매우 복잡해 보일 수 있음
그럴 때 rebase and merge를 하거나 squash and merge를 하자!
새 브랜치에 있던 코드 변경사항들이 main 브랜치로 이동한다.
git switch main
git merge --squash 브랜치명
git commit -m '메시지'
기록을 남겨야하는 중요한 브랜치를 merge할 땐 3-way merge
기록을 남길 필요없는 쓸데없는 브랜치를 merge할 땐 squash, rebase 쓰는걸 권장한다.
git branch -d 브랜치명
: 병합이 완료된 브랜치삭제
git branch -D 브랜치명
: 병합하지 않은 브랜치삭제
git restore 파일명
: 최근 commit된 상태로 현재 파일의 수정내역을 되돌리기
git restore --source 커밋아이디 파일명
: 입력한 파일이 특정 커밋아이디 시점으로 복구git revert 커밋아이디
: 그 커밋아이디에서 일어난 일만 취소 (그 이후에 했던 파일이나 커밋들은 영향없이 유지된다.)
git revert HEAD
: 최근 했던 commit 1개만 revertgit reset --hard 커밋아이디
: 그 커밋이 생성될 때로 시간을 되돌려줌
--soft
: staging area에 남기기git clean
사용로컬저장소에 있는걸 원격저장소에 넣기
git init
git branch -M main
git add .
git commit -m '메시지'
git push -u 원격저장소주소 main
원격저장소 주소가 너무길어서 불편하니까
git remote add origin 원격저장소주소
명령을 사용해서 origin이라는 변수(관습, 다른거 써도됨)에 원격저장소 주소를 할당
후에는
git push -u origin main
으로 사용한다.
사실 -u
옵션이 뒤에 입력한 주소를 기억하는 옵션인데 한번 해놓으면 다음부터는
git push
만 입력해도됨 -> 앞으로의 모든 명령어도 동일하다(pull등등..)
협업을 하기로 했는데 팀원1은 코드가 없는 상태이다.
그렇다면 원격저장소에 들어가서 코드를 clone 해오면 된다.
git clone 원격저장소주소
이렇게 사용한다.
git clone
를 하고 git push
를 하려는데 에러가 뜬다.
그 이유는 clone하고 push하기 전에 다른 사람이 원격저장소에 있는 코드를 수정하거나 파일을 추가한것!
그럴 때는 git pull
을 하고 그 다음에 git push
를 해주면 된다.
git pull
은 원격저장소에 있던 모든 브랜치 내용을 가져와서 로컬저장소에 합치라는 뜻이다. (fetch+merge)
git pull 원격저장소주소
이렇게 사용, 기존에 -u를 사용했었다면 git pull
만 써도 됨
git branch 브랜치명
git switch 브랜치명
git add .
git commit -m '커밋 메시지'
git push 원격저장소주소 로컬브랜치명
원격저장소에 브랜치를 만들어서 코드를 수정한 후 merge를 하고 싶을 때는 그냥 하는게 아니라 검증과정을 거쳐야한다. 이를 pull request라고 하는데 팀원끼리 merge전에 코드를 검토하는 행위이다.
어떤 브랜치를 어디에 합칠 것인지 선택 후 create pull request 클릭
확인 후 conflict같은거 있으면 수정하고 merge 해주면 끝!
(merge는 3-way merge, rebase and merge, squash and merge 이렇게 세 종류중 선택한다.)
코드를 수정하다가 맘에 안드는 '부분'이 있어서 그 부분만 잠깐 삭제하고 싶다면 git stash
를 사용하면 된다.
git stash
: 코드 수정한 부분은 숨겨지고(다른 공간에 보관) 파일들이 최근 commit상태로 돌아간다.
git stash save "aaa 코드 짰는데 망함"
: 이렇게 메모도 함께 입력 가능
git stash list
: git stash 는 여러번 할 수 있는데, 현재 stash되어 있는 코드 목록을 전부 출력해준다.
git stash pop
: 보관했던 코드를 다시 불러온다. 코드가 여러개 있다면 가장 최근에 보관했던 코드부터 먼저 불러온다.
git stash drop 삭제할id
: 특정 stash 삭제
git stash clear
: 모든 stash 삭제
git stash -p
: 전체 말고 일부 코드만 stash 하고 싶을 때 사용 -> 그럼 파일을 훑어주면서 stash 할지 의견을 물어본다.