axnuo

[Git/코드잇] Git 전반적인 이해 - 오늘도 코드잇 : 1주차 본문

Project/Git

[Git/코드잇] Git 전반적인 이해 - 오늘도 코드잇 : 1주차

axnuo 2024. 1. 8. 17:29

이 글은 코드잇의 Git 강의를 수강하며 정리한 내용입니다.

 

코드잇 도전 30일 캠프에 참여하며 매주 공부기록을 진행하려 한다.

첫 주에는 Git 강의 총 85개의 레슨을 들었다!

수료증!!

강의를 통해 막무가내로 썼던 git 명령어들을 명확하게 파악할 수 있었고 작업 영역, 브랜치, HEAD의 역할 등에 대해 자세히 알 수 있었다. 강의를 들으며 정리한 내용을 기록한다!!

repository와 commit

  • git init : repository 생성
  • git config user.name “이름” ⇒ 커밋에 이름 같이 저장
  • git config user.email “asds@asd.com” ⇒ 얘도 마찬가지
  • git add (파일명)
  • git commit -m “Create commit zz”
    • commit은 사용자 이름 + 이메일 주소 + 커밋메세지 설정

git의 3가지 작업 영역

  • working directory : 작업 디렉토리
  • staging area : add한 파일들이 존재하는 영역
  • repository : 변경 이력들이 저장되어 있는 영역

모든 파일을 넣으려면…

  • git status : 상태 확인
  • git add . : 모든 걸 추가하겠다

staging에서 취소하려면

  • git reset

마크다운(README) 작성 방법

https://docs.github.com/ko/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax

커밋 히스토리

  • git log

⇒ 깔끔하게 볼려면 git log -- pretty=oneline

  • git show (커밋 아이디 중 4자리만 해도 됨)
  • ⇒ 해당 커밋에서 바뀐 점을 구분할 수 있음
  • git commit
    • 커밋 메세지 입력 가능
  • 커밋 자체를 수정하는 방법
    • git commit --amend
    • 가장 최근 커밋을 수정하는 명령어이다

커밋 주의사항 + 옵션

  • 커밋 제목과 내용 사이에는 한 줄을 비울 것
  • git log --pretty=oneline을 git history라는 별명으로 aliasing
    • git config alias.history ‘log --pretty=oneline’

커밋 사이의 차이 확인

  • git diff (이전 커밋 ID) (이후 커밋 ID)

HEAD의 의미

가장 최근에 한 커밋을 의미

이전 커밋으로 git reset

  • git reset --hard
  • HEAD가 가리키는 커밋에 따라 working directory 내부가 달라진다.
  • git reset → HEAD가 과거의 커밋을 가리키게 할 수 있음
  • 특정 커밋 이후부터 맘에 안드는 게 있으면 예전 커밋부터 다시 나아가게 할 수 있음

git reset의 3가지 옵션

작업을 가져오려면은 git pull 하면 되겠져?

HEAD^는 HEAD가 가리키고 있는 이전의 커밋을 나타냄

바로 이전 말고 더 예전 걸 불러오고싶다면 HEAD~2 이런 식으로 사용하면 된다

  • git tag (태그이름) 으로 태그 설정도 가능

브랜치

master = 기본 브랜치

  • git branch (브랜치명)
    • 브랜치 생성
  • git checkout (브랜치명)
    • 브랜치 이동
  • git branch
    • 브랜치 확인
  • git branch -d test
    • -d option : 삭제
  • 브랜치를 만들면서 이동
    • git checkout -b test

다른 브랜치에 저장되어있는 걸 그대로 가져오고 싶을 때

⇒ branch merge

  • git merge master
    • 현재 있는 브랜치에 master 브랜치를 합치고 싶다
    ⇒ 커밋 메세지 창이 뜸

merge conflict

⇒ 충돌 발생

⇒ 그냥 파일 열어서 코드 수정하고 커밋해주면 됩니다

⇒ 근데 사실 그냥 머지 자체를 삭제해도 되긴 함 ㅎㅎ

  • git merge --abort

git remote add origin https://github.com/kyuri-dev/Math_Box.git

git push -u origin master

이건 꼭 해주는 것이 좋겠죠?

로컬 → 리모트

set upstream 옵션을 줘야한다 ⇒ -u

  • git push --set-upstream origin premium

git reset은 이전과 이후 커밋을 자유자재로 넘나들 수 있음

detached HEAD ⇒ HEAD가 브랜치와 관계 없이 특정 커밋을 가리키는 것

참고로 checkout 은 HEAD가 브랜치를 가리키게 할 수도, 커밋을 가리키게 할 수도 있음

머지 방식에는 앞에 있는 애로 옮겨가는 fast forward 머지하고 3-way 머지가 있음

Git 협업

remote에 있는 내용이 수정됐는데 로컬도 수정되었다면 push를 못함

⇒ pull을 해서 타인이 젖아한 걸 받아온다

  • git fetch
    • merge가 아니라 일단 가져오는 것… 가져와서 살펴본 후 머지하고 싶을 때 사용
    • git diff ⇒ 리모트랑 로컬의 차이도 확인할 수 있음
  • git blame
    • 특정 파일의 코드를 누가 작성했는지 찾아낼 수 있음
    • git show (커밋아이디)를 써도 된다
  • git revert
    • 작업을 되돌리고 싶을 때 사용
    • 이전에 커밋한 내용을 없애는 느낌…
    • reset이랑 다른 이유는 remote에도 적용되기 때문이다. reset은 이전 커밋에 들어가는 것이고 revert는 새로운 커밋을 생성하는 것이기 때문이다
    • ⇒ 즉 내용은 같지만 커밋 자체는 다른 것!
  • git revert 시작~끝 커밋번호
    • 여러개의 커밋을 revert 할 수 있다. 대신 끝번은 해당 X 약간 배열 st
    • 처음 순서와 거꾸로 revert됨

Git 자유자재로 다루기

git reset을 하고 돌아오면…

reset을 해도 커밋들이 삭제되는 것은 아님.

reset을 했는데 돌아가고 싶은 커밋 아이디를 모를 때

  • git reflog
    • HEAD가 가리키던 커밋을 알려줌

커밋 히스토리를 보는 다양한 방법!

  • git log --pretty=oneline --all
    • 다른 브랜치의 커밋 히스토리도 확인하기 위함
    • 근데 어느 브랜치에 있는지 파악하기 어려움
  • git log --pretty=oneline --all --graph
    • 각 브랜치를 확인할 수 있음 커밋과 브랜치의 관계를 그래프 형식으로 확인할 수 있다.
  • git rebase --continue
    • rebase가 contlict 나서 안됐을 경우에 다시 실행해주라는 의미!
    • rebase는 샤로운 커밋을 만들지 않음
    • 히스토리가 머지의 경우보다 좀 더 깔끔하긴 하당…
    • 결과물은 항상 같음!

작업 내용 임시 저장

  • git stash
    • 최근 커밋 이후의 작업 내용이 스택으로 옮겨지고 워킹 디렉토리는 최근 커밋으로 초기화
  • git stash list
    • 스택에 잘 넣어졌는지 확인하는 커맨드

⇒ 즉 스택에 작업한 내용이 임시 저장된당

  • git stash apply
    • 스택에 있는 내용을 다시 가져오겠다!

잘못된 브랜치에서 작업할 경우

  • git stash
  • 원하는 브랜치로 이동
  • git stash list
  • git stash apply (가장 최근 거)
    • 혹은 작업 내용 ID
    • conflict 해결해주면 된다잉
  • git stash drop (아이디)
    • list에 있는 내용 제거
  • git stash pop (아이디)
    • 작업 내용 적용하면서 동시에 스택에서 제거

필요한 커밋만 가져오기

  • git cherry-pick (커밋 ID)
    • 원하는 커밋만 가져온당

여러 커밋을 하나의 커밋으로 만들기

  • git reset 에서 soft나 mix를 써라…
  • .gitignore 파일 : git이 무시하는 파일의 이름 git에 의해 버전관리 될 필요가 없는 파일이 무시된다!