● fork , clone
- git fork : 다른 사람의 레파지토리를 내 레파지토리에 가져오는 것
- github 페이지에서 쉽게 가능하다
- git clone : 그 레파지토리를 내 데스크탑에 가져오는 것 (HTTPS 나 SSH 프로토콜로 가져올 수 있다.)
- 터미널에서 원하는 디렉토리로 가서 clone하면 끝!
● add, status, commit
- git add : staging area에 내가 수정한 파일들을 넣는다. add하는 행위를 스테이징이라고도 한다.
- git add 작명파일 : 작명파일만 스테이징한다.
- git add . : 모든 파일을 스테이징한다.
- git status : 내가 스테이징해놓은 것들을 확인할 수 있다.
- git commit : 내컴퓨터에 있는 디렉토리에 실질적으로 적용하는 것 (버전 생성
- git commit -m '어쩌고 저쩌고' : 커밋할 때는 메모를 하듯 내용을 적는다.
● push, pull
- git push : 레파지토리에 커밋한 파일들만 업데이트해준다.
- git pull : 레파지토리에 push된 애들을 내 로컬 컴으로 가져온다.
● log --all --oneline
- git log --all --oneline : 내가 그동안 커밋한 내역들을 모두 보여줌
- git log --all --oneline --graph : 내가 그동안 커밋한 내역들을 모두 시각적으로 잘보여줌
● diff
- git diff : 최근 커밋이랑 현재파일이랑 달라진 부분을 보여줌
- 근데 diff기능은 조금 별로다. 오류같이돌아가는게 좀 있음
- git difftool : 기존과 달라진걸 시각적으로 보여줌 / 끄고싶으면 :qa 치면됨 안되면 q
- git graph : git 확장팩 사실 더 조은게 잇음ㅋ 왼쪽에서 파일 위로 마우스 올리면 + 버튼으로 스테이징할 수 있고 큰 커밋버튼으로 바로 커밋가능.. 그리고 branch들을 매우 시각적으로 잘보여준다.
● branch, switch
- git branch 작명 : 작명으로 브랜치 만들어짐
- git branch -d 작명 : 브랜치 삭제 (머지완료된 브랜치 삭제)
- gir branch -D 작명 : 브랜치 삭제 (머지가 안된 브랜치 삭제)
- git switch 작명 : 작명으로 브랜치 전환됨
- git status : 지금 내가 어느 브랜치에 있는지 확인가능
● merge (3-way, fast-forward, rebase, squash)
- 3-way : 중심이 되는 브랜치로 합치는 것, 중심 브랜치로와서 merge를 해주어야한다. merge 후 새로운 커밋으로 반영됨
- 각각의 브랜치가 다른 파일 수정했을 때 or 새로운 파일 생겼을 때는 해피엔딩 ==> 수정 잘 반영해주고, 새로운 파일도 메인에 잘 생김
- 각각 같은 파일 수정했을 때 => 충돌생김 / 그럼 머지하고 원하는 부분만 내가 수정하면됨 새로생긴 파일들도 잘합쳐줌
- fast-forward : 딱히 합칠게 없어서 그냥 신규브랜치 보고 "지금부터 니 이름은 main 브랜치여" 하는 것
3-way, fast-forward 아무렇게나 merge 해도 브랜치를 merge 하고 나면 브랜치가 자동으로 삭제되진 않기 때문에, 브랜치를 삭제해주는 것이 좋다. ex) git branch -d 브랜치명
- rebase : rebase는 브랜치의 시작점을 다른 commit으로 옮겨주는 행위
git switch 새로운브랜치
git rebase main
git switch main
git merge 새로운브랜치
3-way merge 말고 강제로 fast-forward 하고 싶을 때••• 브랜치 그딴거 필요없이도 코드 잘짜는 고수같은 느낌을 주고 싶을 때 그러고 싶으면 일반 3-way merge 대신 rebase & merge 한다.
먼저 새로운 브랜치로 가서 git rebase main 하면된다. 그럼 브랜치가 main 브랜치 끝으로 이동하는데 그걸 fast-forward merge 하면 된다.
쓰는이유 : 3way merge는 깃로그에서 보면 너무 지저분해지기 때문에, 깔끔하게 보이려고 하는 것. 근데 충돌이 많이 생길 수 있다는 단점이 있다.
- squash : 3-way merge 된 것들은 매우 복잡해인다. main 브랜치 git log 출력해보면 3-way merge된 브랜치들의 commit 내역도 다 같이 출력되어서 더러워지는 현상이 있다. 그러기 싫으면 rebase 아니면 squash and merge 하면 된다. 새로운 브랜치에 있던 commit 들을 연결해주는게 아니라 똑 떼와서 main 브랜치에 붙여주기 때문이다.
git switch main
git merge --squash 브랜치명
git commit -m '메세지'