깃의 영역

폴더 ( = 작업트리 )

폴더는 현재 작업중인 동적인 공간을 말한다.
( 비유하자면 카메라의 앵글 )

인덱스

저장소와 폴더사이에 위치하면서 정적인 특징을 가진다.
폴더의 변경사항을 기록한다 (스테이징)
( 비유하자면 카메라로 찍은 사진 )

헤드 ( = 저장소 )

인덱스를 커밋하면 헤드에 기록이 남는다
( 비유하자면 여러 사진이 담겨 있는 사진첩 )


Git 세팅

  • 깃 설치
  • 폴더에서 커맨드 여는 방법
    ( 리눅스 명령어만 인식함 )

vscode로 깃을 관리하자

  • vscode 터미널 ( ctrl + escape ) 오픈
  • 터미널 디폴트 변경



Git 명령어

깃은 작업영역과 인덱스영역, 헤드영역을 가진다

  • 초기화 ( 마지막에 .git 확인 ) - 작업영역으로 선언
    git init
  • 변경된 사항 추가 ( . 은 변경된 모든것을 추가 ) - 작업내용을 인덱스에 추가
    git add .
  • 커밋 - 인덱스의 내용을 헤드영역에 저장
    git commit -m "( 커밋에 남길 메세지 )"
  • 로그 확인
    git log
    git log --all ( HEAD 변경시 로그 확인 )
    git log --all --oneline ( 간략하게 )
  • 파일 상태 확인
    $ git status
  • git bash 클리어 ( shell 명령어 / 윈도우에서는 cls )
    clear
  • 깃으로 관리 안하는 파일은 여기에



깃허브 업로드

  • 원격 저장소 추가
    git remote add origin + ( 생성된 레파지토리 주소 )
  • 마스터 브랜치 생성 ( 업로드 + 병합 )
    git push origin master

브라우저 연결시키면

  • 업로드 완료

연결 잘못되면 끊어서 다시 연결

git remote rm origin

삭제를 해도 나오는 메세지는 없으니까 제대로 입력하면 된다.


깃허브 다운

  • 브랜치에서 다운받기
    git init
    git remote add origin "깃허브 원경저장소 경로"
    git fetch origin master
    git merge origin/master

( fetch 는 가상의 공간에 다운로드 , merge 는 로컬저장소에 합치기 )
( 참고로 git merge 까지 입력후 tab 몇 번 누르면 사용가능한 명령어 알려줌 )
( git remote -v 연결상태 확인 )

  • fetch + merge 한번에
    git pull origin master
  • 최초에 한번 사용 가능 ( 위 4줄 한번에, 새로운 로컬폴더에 )
    git clone "깃허브 원경저장소 경로"

서브 브랜치 다운

하던 작업을 집에 와서 이어할 경우

  • 서브 브랜치를 열기 ( 생성 -> 다운/병합 )
    git checkout -b "브랜치 이름"
    git pull origin "브랜치 이름"
  • ( 다운 -> 생성/병합 )
    git fetch origin
    git checkout -b "브랜치 이름" origin/"브랜치 이름"

두번째 방법이 많이 쓰이는데 첫번째 방법은 하나의 브랜치를 다운받고 머지하지만 두번째는 모든 브랜치를 다운받기 때문이다



깃 리셋

리셋을 사용해서 히스토리를 되돌릴 수 있다
돌아가고 싶은 헤드의 해쉬값을 입력해서 그 이후의 히스토리를 날린다
( 현재 로그는 리셋해도 변경 없음 )

  • 커밋, 인덱스, 작업영역 모두 삭제
    git reset --hard "삭제할 로그의 해쉬값"
  • 커밋, 인덱스 삭제 - add 하지 않은 상태와 동일
    git reset --mixed "삭제할 브랜치"

작업 영역의 내용 변경이 필요할때 사용

  • 커밋만 삭제 - add 까지만 한 상태와 동일
    git reset --soft "삭제할 브랜치"
  • 파일을 특정 버전으로 롤백
    git checkout [hash] -- path/to/your/file.txt

✅ 커밋 로그 변경시에 주로 사용한다
이전 커밋에 지금 작업 내용을 추가할때 사용한다

git push -f origin master 나만 쓰는 브랜치에 강제 푸쉬

레퍼런스 - https://www.youtube.com/watch?v=asBU9SqAgmI&list=PL93mKxaRDidFtXtXrRtAAL2hpp9TH6AWF&index=11



깃 복구

  • 한번이라도 커밋을 했다면 git reflog 명령어를 입력하면 로그가 전부 나온다

  • 여기서 돌아가고 싶은 커밋으로
    git reset --hard "해쉬값" 으로 복구 할 수가 있다 !! 👍👍👍



커밋 로그 변경

  • 현재 커밋 로그를 잘못 입력했을때
    git commit --amend -m "변경할 커밋 메세지"

또 다른 방법은 바로 전의 로그로 reset --soft 를 한다음 다시 커밋하면 된다


브랜치 생성

  • 새로운 브랜치 생성
    git branch "생성할 브랜치"

  • 생성된 브랜치 목록 확인
    ( 현재 브랜치 * 로 표시되어 있음 )
    git branch


헤드가 2개의 브랜치를 가리킨다

  • 브랜치 변경
    git checkout "변경할 브랜치"
  • 브랜치 생성과 헤드 변경을 한번에
    git checkout -b "생성할 브랜치"


  • Head 는 브랜치 포인터를 말한다 새로운 브랜치를 생성하면 현재 Head 위치에 브랜치가 생성되고 새로운 브랜치 포인터가 현재 Head를 가리킨다 ( 가리키는 위치는 같지만 포인터는 2개 )
  • 정확하게 말하면 브랜치를 만드는것은 Head를 만드는것이다 (
    - 브랜치를 변경하게 되면 Head가 이동된다 ( 브랜치 포인터가 이동 )

🔥 주의점 !
작업을 진행하다가 커밋을 하지 않고 브랜치를 변경하면 기존의 작업 내용이 변경된 브랜치로 옮겨가게 된다.

즉, checkout ( 브랜치변경 )을 실행할때는 무조건 커밋부터 해야한다

checkout 다음에 브랜치 이름말고 아래와 같은 해쉬값을 넣어도 된다



브랜치 병합

하위 브랜치의 작업을 상위 브랜치로 머지( Merge )할때는 상위 브랜치에서 명령어 입력

머지에는 2종류가 있는데 메인브랜치에서 나온 서브브랜치만 커밋이 변경되면 fast-foward merge 를 하고

메인브랜치와 서브브랜치 모두 변경된 커밋이 있으면 3-way merge 를 하게 된다

  • 병합할 브랜치로 이동
    git checkout "병합을 할 브랜치"
  • 머지 실행
    git merge "불러와서 병합할 브랜치"

무시된 .gitingnore 확인

  • .gitignore -> git add . -> 커밋하고 확인
    git status --ignored

원격 브랜치

git branch -r
  • 원격 브랜치의 커밋 로그 확인
    git log origin/main --oneline [--graph --decorate]
  • rebase
    git fetch origin 원격 저장소의 최신 커밋을 가져온다.
    git rebase origin/main
profile
작은것부터

1개의 댓글

comment-user-thumbnail
2023년 1월 20일

저의 마음도 세팅해주세요!!

답글 달기
Powered by GraphCDN, the GraphQL CDN