Git 과 Git-Hub

mia·2022년 12월 4일
0

❓ Git..?

버전 관리 시스템이다.
한 파일로 프로그램의 버전 관리를 하고 싶을 때(과거와 미래를 자유롭게 넘나들 수 있음), 다른 사람들과 협업을 할 때에 유용하게(어떤 개발자가 코드를 작성했는지 확인 가능, 하나의 프로젝트를 여러명이 관리 할 수 있음) 사용한다.

🖥️ VS Code에서 터미널 키는 법

control + 백틱

🔥 자주 사용하는 Git 명령어

1. git init

처음 한번만 쓴다. git에게 폴더 또는 파일을 관리해달라고 요청하는 것.
버전 관리를 하고 싶은 디렉토리에서 명령어 입력.

2. git status

현재의 상태를 알려주는 것. 항상 액션을 취한 뒤에는 git status로 확인해주기!!

  • 빨간색 : untract files (관리하지 않고 있는 파일들)
  • 초록색 : 관리 중인 파일들

3. add git

git에서 관리할 파일을 넣어주기. 파일 수정 이력 기록 준비. add하면 staging 상태

git add 파일이름 -->> 하나씩 넣어주기
git add . -->> 모든 파일 넣어주기
git rm --cached 파일이름 
-->> 원격저장소에 있는 파일을 없애지만 로컬저장소에 있는 파일은 없애지 않는다.

💡 파일 전체를 관리 할 때 그 중 관리하기 싫은 파일이나 폴더가 있다면 .git ignore 파일을 만들어 그 안에 적어주면 더 이상 반영하지 않는다.
추가적으로 .git 파일은 git init을 하면 자동으로 만들어지는 폴더로 git 이 꼬여버려서 정말정말로 회복이 어려울 것 같을 때에는 이 파일을 제거하면 해결이 된다.. (그치만 그건 정말 최최최최후의 방법..)

4. git commit

git에게 지금 상태를 기억해달라고 하는 것.
commit..?
git에게 기억해달라고 부탁하는 단위
commit을 할 때마다 코멘트를 남겨주어야 잊어버리지 않는다. 코멘트는 항상 자세하게 쓰기!!
보통 첫번째 커밋은 Initial Commit이라고 관용적으로 많이 쓴다.

<!--한 줄로 커밋 메세지를 남기고 싶을 때-->
git commit -m "Initial Commit" 
<!--여러 줄의 커밋 메세지를 남기고 싶을 때-->
git commit

보통 순서는 git add(깃에서 관리해줘) -> git commit(지금 상태 기억해줘)이지만 동시에 하고 싶을 때에는 git commit -am "메세지"를 사용한다.

git commit -am "메세지"
-a은 all의 의미이기 때문에 파일을 따로 commit하고 싶다면 아래의 방법을 사용한다.
git commit 파일1 파일2 -m "메세지"

5. git log & git shortlog

commit된 상태를 보여준다. 짧게 보고 싶다면 shortlog를 이용하면 된다.

6. git checkout

변경된 상태를 이전으로 되돌리기 (커밋 되기 전)

7. git diff

바뀐 부분이 어디인지 정확하게 알려준다.

8. git remote

서버와 git을 연결해준다.

git remote add origin 페이지
<!--origin..?? github에 만든 repository 이름을 변수로 저장한 것-->

9. git push

서버로 업로드 하기. 커밋되어있는 부분까지만 업로드한다.

git push origin main -->> 이름의 main을 서버로 업로드 하겠다.

10. git pull

서버에서 변경된 부분 가져오기. 협업을 할 때 서버에 있는 커밋과 내 컴퓨터에 있는 커밋이 맞지 않으면, 즉 변경된 내용을 가지고 오지 않은 채 작업을 하게 되면 git 충돌이 일어날 수 있다.
항상 작업 전에는 깃허브에 저장되어 있는 파일들을 모두 가져온 뒤에 작업하기!!!

git pull origin main

11. git reset

원하는 단계만큼 돌아갈 수 있다.

git reset HEAD~돌아가고 싶은 단계만큼의 수 (커밋되기 전)
git reset HEAD~단계 -- mixed (커밋되기 전)
git reset HEAD~단계 -- soft (커밋된 후)
git reset HEAD~단계 -- hard (기존 커밋으로)
git reset 커밋 번호 (원하는 커밋으로)

💡 HEAD??? 현재 작업중인 커밋으로 작업트리의 가장 최근 커밋을 가리킨다. 작업트리에 변화를 주는 git 명령어들은 대부분 HEAD를 변경하는 것으로 시작한다.

12. git revert

실수한 내용을 기록으로 남길 수 있다. push까지 한 수 실수를 바로잡기 위해서는 revert로 push해주어야 한다.

git revert HEAD
git revert 커밋번호

13. git branch

main은 사용자 화면에 직접 보여지는 부분이기 때문에 보통 새로운 부분을 구현할 때에는 branch를 이용하여 만들고 테스트 후 다시 합쳐서 배포한다.
branch는 하나의 커밋과 그 부모 커밋들을 포함하는 작업 내역이며, 브랜치를 많이 만들어도 메모리나 디스크 공간에 부담이 되지 않기 때문에 작은 단위로 브랜치를 잘게 나누는 것이 좋다.
git branch는 현재의 위치를 알려주기 때문에 항상 작업을 시작하기 전에는 git branch, git pull을 먼저 확인해주어야한다.

git branch 브랜치이름

14. git checkout

main에서 branch로 branch에서 또 다른 branch로 이동하고 싶을 때 사용. 파일에 쓰는 checkout과 브렌치에 쓰는 checkout은 다르다.

git checkout main

15. git merge

로컬에서 현재 브랜치 코드와 특정 브랜치 코드를 합칠 때 사용.
받는 쪽에서 원하는 부분을 연결해온다.

16. git rebase

한줄로 연결하고 싶을 때 사용한다.

17. git cherry-pick

원하는 부분만 쏙 빼온다.

18. git tag

매번 커밋 번호를 가져오는게 힘들 경우 tag이름을 달 수 있다. 보통 중요한 기점이 되는 커밋들에는 태그를 단다.

19. git stash

커밋하지 않고 임시저장 할 수 있다. 다시 임시저장한 파일로 돌아가고 싶을 때는 git stash apply를 사용한다.

20. git fetch

원격과 로컬을 비교해 볼 수있다.
git pull은 git fetch와 git merge가 합쳐졌다.

21. git branch -D 브렌치이름

브렌치를 지울 수 있다.

22. git clone

깃 허브 레파지토리에서 코드 복제해오는 것. 기존 레파지토리를 내 로컬로 가져오는 명령어
기본으로 깃 허브에서 코드를 복제해오면 깃의 이름을 따로 설정하지 않아도 origin으로 설정된다.

git  clone 깃주소

🧨 Github 활용법 및 유의 사항

브랜치를 새로 생성할 때에는 항상 main 브랜치에서 생성하기

작업하던 브랜치에서 새로운 브랜치를 생성하면 기존 브랜치에 있던 커밋이 그대로 따라간다.

A브랜치에는 그것만을 위한 코드만 있어야 하는데 A에서 브랜치에서 B브랜치를 생성하면 B브랜치에 A커밋이 따라와서 나중에 A브랜치를 수정했을 때 conflict가 발생한다.

만약 B브랜치에서 A브랜치에 있는 코드가 필요한 상황이라면 1. A브랜치가 메인에 merge된 후 2. main에서 pull을 받은 후 3. B브랜치에서 git merge main으로 합쳐주어야 한다.

🧨 손머지(merge manually), A브랜치의 코드를 복사해서 B브랜치에 붙여 넣기 하는 것.. 은 절대절대 하지 말기..!!!!!

Push 전 검토 과정

  1. git add, commit (feature 브랜치에서 작업 후 커밋 완료)
  2. git checkout main (main으로 이동)
  3. git pull origin main (최신의 main을 받아옴)
  4. git checkout feature (작업하던 브랜치로 다시 이동)
  5. git merge main (main에 작업한 내용 merge)
  6. (conflict 발생 시 해결 후 add, commit)
  7. git push origin feature (작업한 내용 푸시)

⌨️ 커밋 메세지 작성

제 3자가 알아 볼 수 있도록 적는다!

분류

  • Add - 레이아웃 / 기능 추가
  • Remove - 내용 삭제 (폴더 / 파일 삭제)
  • Modify - 수정
  • Fix - 버그/오류 해결
  • Refactor - 코드 리팩토링 (멘토 리뷰 반영 / 스스로 리팩토링 / 중복 코드 제거 / 불필요 코드 제거 / 성능 개선)
  • Docs - 문서에 관련된 수정작업 (README.md 등)
profile
노 포기 킾고잉

0개의 댓글