본문 바로가기
git & github

git github 처음부터 다시 배우기 - 3. git 디테일

by spare8433 2023. 2. 13.

📕 git 3 가지 상태


enter image description here


1. Working directory

  • untracked: Add된 적 없는 파일, ignore 된 파일
  • tracked: Add된 적 있고 변경내역이 있는 파일
  • git add 명령어로 Staging area로 이동

2. Staging area


  • 커밋을 위한 준비 단계

    • 예시: 작업을 위해 선택된 파일들
  • git commit 명령어로 repository로 이동


3. Repository


  • .git directory라고도 불림
  • 커밋된 상태



📘 파일의 삭제와 이동


1. git rm


  • tigers.yaml 를 삭제해본 뒤 git status 한 결과

    • 파일의 삭제가 working directory에 있음
    • git reset --hard로 복원
  • git rm tigers.yaml로 삭제하고 git status 한 결과

    • 파일의 삭제가 Staging area에 있음
    • git reset --hard 로 복원

2. git mv


일반적으로 파일 명 변경시 상황

  • tigers.yamlzzamtigers.yaml로 이름변경 뒤 git status 한 결과
    • Changes not staged for commit: tigers.yaml deleted
    • Untracked files: zzamtigers.yaml
    • Working directory 에서 add 작업이 필요한 상황
  • 이후 추가로 git add . 한 결과
    • Changes to be committed: renamed: tigers.yaml -> zamtigers.yaml
    • 비로소 Staging area 로 들어감

git mv 명령어 사용 상황

  • 초기 상태로 복원 한뒤 git mv tigers.yaml zzamtigers.yaml 로 실행 후 git status 한 결과
    • Changes to be committed: renamed: tigers.yaml -> zamtigers.yaml
    • 바로 Staging area 로 들어감

3. 파일을 staging area에서 working directory


#  `staging area`에서  `working directory`로
git restore --staged (파일명)

# `working directory`에서도 제거 즉 변경내역을 없에는 작업
git restore (파일명)
  • 예전: git reset HEAD (파일명)

4. reset의 세 가지 옵션


  • --soft: repository에서 staging area로 이동
  • --mixed (default): repository에서 working directory로 이동
  • --hard: 수정사항 완전히 삭제 working directory 에서도 삭제



📗 Git의 HEAD


현재 속한 브랜치의 가장 최신 커밋을 의미


1. checkout으로 앞뒤 이동해보기


  • ^ 또는 ~: 갯수만큼 이전으로 이동

    • git checkout HEAD^^^, git checkout HEAD~5
  • 커밋 해시를 사용해서도 이동 가능

    • git checkout (커밋해시)
  • git checkout - : (이동을) 한 단계 되돌리기

2. 💡 이전으로 checkout 된 HEAD 상태


이전의 분기점으로 가면서 익명의 브랜치에 위치함을 알 수 있음 그리고 그 브랜치의 HEAD 상태이다.


  • checkout으로 이전으로 돌아간 뒤 브랜치를 만들어 새로운 분기를 만들 수 있다
    • ex) git switch -c (브랜치 이름)

3. HEAD reset


HEAD 기준으로 reset 하여 분기점을 뒤로 돌릴 수 있음


git reset HEAD(원하는 단계) (옵션)



📙 fetch 와 pull


  • fetch: 원격 저장소의 최신 커밋을 로컬로 가져오기만 함 (확인 용도)
  • pull: 원격 저장소의 최신 커밋을 로컬로 가져와 merge 또는 rebase (실제 적용)

1. fetch 내역 살펴보기


  1. 원격의 main 브랜치에 커밋을 추가한 후
    • git checkout origin/main으로 확인해보기
    • 다른 커밋 내용이 있는것을 확인 가능하지만 변경내용은 적용되지 않은상태

  1. main 에서 원격의 변경사항을 fetch 해옴
    • git checkout origin/main으로 확인해보기
      • 다른 커밋 내용이 있는것을 확인 가능하지만 변경내용은 나와있는 상태
    • pull로 적용

2. 원격의 새 브랜치 fetch 로 확인 후 연결

  1. 원격에서 브랜치가 생성되고 작업 내용을 생성한 상태
  1. 로컬에서 git fetchgit branch -a 로 원격 브랜치가 추가된 것을 확인 할 수 있다.
  1. git checkout origin/(원격의 브랜치명) 하여 변경내용을 확인 할 수 있다
  1. git switch -t origin/(브랜치명) 로 원격 브랜치를 로컬브랜치를 생성하며 연결한다



📒 git config 설정


config를 --global과 함께 지정하면 전역으로 설정됩니다.


1. 설정값 확인


# 현재 모든 설정값 보기
git config (global) --list

# 에디터에서 보기  _(기본: vi)_
git config (global) -e

2. 기본 에디터 수정


# vsc 로 설정 예
git config --global core.editor "code --wait"
  • 또는 code 자리에 원하는 편집 프로그램의 .exe파일 경로 연결
  • --wait : 에디터에서 수정하는 동안 CLI를 정지
  • 💡 git commit 등의 편집도 지정된 에디터에서 열게 됨

3. 유용한 설정들


# 줄바꿈 호환 문제 해결
git config --global core.autocrlf (윈도우: true / 맥: input)

# `pull`  기본 전략  `merge`  또는  `rebase`로 설정
git config pull.rebase false
git config pull.rebase true

# 기본 브랜치명
git config --global init.defaultBranch main

# push시 로컬과 동일한 브랜치명으로
git config --global push.default current

4. 단축키 설정


📄 관련 문서 보기