git은 이전 파일이랑 현재를 비교 최종 완성 코드를 저장하기에 diff를 일일이 비교하는 svn 방식보다 빠르다
HEAD: 내가 현재 작업하는 로컬 브랜치
init
- git init : local 레포지토리 생성 → remote 레포지토리 연결해줘야 됨
clone
- git clone ${ git레포 url }. : 현재 폴더에 로컬 레포 생성
- git clone ${ git레포 url } : url 뒤에 마침표 없으면 새 폴더 생성 후 로컬 레포 생성
remote
- git remote -v: 연결된 git 저장소 확인
- git remote remove origin: 해당 git 저장소 연결 삭제
- git remote add <저장소명><git주소>: 해당 git 저장소 로컬과 연결
add
- git add . : 가장 최근 변경된 내용 전부 stage에 올리기
- git add “파일명” : 해당 파일만 stage에 올리기
commit
- git commit —amend : 가장 최근 commit한 내역 수정 , 끝나면 esc - :wq
- git commit -m “메세지” : 해당 메시지로 변경 사항들 commit
push
- git push origin 브랜치명 : 연결된 github 저장소 해당 브랜치로 commit한 파일 전송
- git push -f origin 브랜치명 : 강제로 전송 (최악의 경우)
fetch
- git fetch origin 브랜치명 : 해당 브랜치의 내용 다운 병합은 안됨
→ 충돌 방지, 바뀐 내용만 확인 만약 괜찮으면 pull로 병합!
pull
- git pull origin 브랜치명 : 해당 브랜치의 내용으로 최신 업뎃 ( 파일 다운+ 병합)
merge
- git checkout 브랜치1 → git merge 브랜치2 : 브랜치1에서 브랜치2의 내용 병합( 팀원이 pull request하면 팀장이 이렇게 merge)
충돌한 경우
stash
- git stash : 코드 백업하기
- git stash drop: 최근 백업 코드 삭제
- git stash drop stash명 : 해당이름의 stash만 삭제
- git stash clear: 백업 전부 삭제
- git stash apply stash명: 원하는 stash 복구
만약 코드를 잘못된 branch에서 작성했을때 작성한 코드를 git stash로 백업 후, 원상태 복구하면 된다. 그리고 git checkout 원하는 브랜치명으로 전환한 뒤 백업코드를 해당 branch에서 복구하면 됩니다.
reset
- git reset HEAD^ : 가장 최근 push한 내역 삭제 → git push -f origin main 해서 github 저장소와 로컬 저장소 동일하게 만들어 주기 (나쁜 방법)
- mixed: 해당 단계로 reset , 변경 사항은 unstaged
- hard: 해당 단계로 reset, 변경 사항도 삭제
⇒ git push -f origin main 이런식으로 reset 후 push
revert
- git revert :reset 순한 맛 삭제 후 commit 아니고 이전 내용을 push 하는 느낌
cherry-pick
- git : 탐나는 commit만 따로 떼서 push
amend
- git commit —amend: 커밋 단계일 때 커밋 내용 변경
git commit --amend --no-edit --date "Thu May 14 13:15:56 2020 +0900"
내 브랜치 history 변경
branch, checkout, switch
- git branch : 현재 자신과 연결된 branch 목록
- git branch -d 브랜치명 : 해당 branch 삭제
- git branch -D 브랜치명: 위명령어가 안들을 때 강제 삭제
- git branch 브랜치명 : 브랜치명으로 브랜치 생성
- git checkout 브랜치명 : 해당 브랜치로 전환 (요즘X)
- git checkout -b 브랜치명 : 위 두 명령어 합친 것 (요즘X)
- git switch 브랜치명 : 해당 브랜치로 전환
- git switch -c 블랜치명: 해당 브랜치명으로 새 브랜치생성
- 보통 협업시 기능은 feat/기능이름, 수정은 fix/수정명으로 브랜치를 생성하고 dev 또는 main으로 merge → 완성후 release 브랜치에 올림
상태확인
- git status : 현재 로컬 저장소 변경내역, github 저장소와 상태차이 확인
- git log : push된 내역 일람
협업방식
- fork한 뒤 내 repo에서 작업 후 pull request하는 방법
장점: fork한 건 내 레포라 맘대로 수정해도 된다
단점: 원본 저장소의 변경 사항을 즉각적으로 반영하기 불편, 전체적인 협업자들의 작업 history를 보기 힘듬
- collaborator 같은 repo의 팀원 각각의 branch에서 작업후 pull request
장점: 원본 저장소에 모두 작업하기에 history 보기가 좋다.
단점: 협업자가 많아지면 branch도 많아짐
- pull request와 코드 리뷰
- commit msg 작성법
- pull request 작성법
참고
- git commit —amend —no-edit —date : commit 시간 바꾸기