Gom3rye

Git 본문

현대 오토에버 클라우드 스쿨

Git

Gom3rye 2025. 7. 15. 19:24
728x90
반응형

Git 명령어

git init

  • 디렉토리를 git과 연동
  • 정상적으로 연동이 되면 .git 이라는 디렉토리가 생성된다.
  • 리눅스나 맥에서는 .으로 시작하면 숨김 속성이 부여된다.
  • .git 디렉토리를 삭제하면 연동이 해제된다.
  • .git 디렉토리를 다른 디렉토리로 복사하게 되면 연동한 것과 동일한 효과를 가지게 된다.

사용자 정보 설정

사용자 정보 설정이 안되면 commit이 안된다.

  • 저장소 별 설정
  • 설정 확인
    • git config --list
    • git config 항목이름
  • 설정 해제
    • git config --unset 항목
  • 전체 저장소 설정을 동일하게 작성
    • git config --global 항목이름값
  • 이 정보는 .git 안에 config라는 파일에 작성된다.
    • config 파일에는 사용자가 직접 설정한 항목만 저장된다.
    • 시스템 설정 항목과 글로벌 설정 항목은 다른 곳에 저장된다.
  • 설정의 우선 순위
    • 로컬 → 글로벌 → 시스템

add와 commit

저장소 디렉토리에 파이썬 파일(main.py) 작성

git status: 저장소 상태 확인

  • On branch master: 현재 브랜치 정보
  • No commits yet: 커밋이 없음
  • Untracked files: 추적 중인 파일 이외에 새로 추가된 파일을 출력
  • nothing added to commit but untracked files present (use “git add” to track): 커밋할 파일 여부 → 지금은 없음(staging 영역에 파일이 없음)

스테이징 영역에 파일 추가

  • git add 추가할 파일이나 디렉토리
  • main.py 추가 : git add main.py

git commit

로컬 레포지토리에 변경 내용을 반영

  • 커밋 메시지를 작성하고 ESC를 누르고 :wq! 로 빠져나오면 된다.
  • staging 영역에 추가하면서 메시지를 작성: git commit -am 메시지
    • 주의할 점은 untracked 파일에는 적용되지 않는다.
    • a 옵션: staging area에 반영하는 것이고 m 옵션은 메시지를 바로 작성하겠다는 옵션이다.
    • 한 줄 메시지는 “ “를 하지 않아도 되는데 여러 줄 메시지를 작성할 때는 반드시 “ “를 추가해줘야 한다.

status, log, show

git status

  • 저장소 안에 있는 파일들의 상태 정보를 확인할 때 사용한다.
  • 새로운 파일이 추가되거나(Untracked), 기존 파일에 변경이 생기거나(Modified) 하는 상황을 자동으로 감지한다.
  • git status를 사용하면 저장소 내부 파일들의 상태를 출력할 수 있다.
  • s 옵션을 추가하면 간결하게 출력한다.
    • ??: Untracked
    • M: Modified
    • MM: Staging에 추가된 후 Modified

git log

커밋 내역을 역순으로 출력

  • 몇 개의 내역만 출력: git log -개수
  • 커밋의 상세 내역 출력: git log -p
  • 숫자를 추가하면 최근 커밋부터 숫자만큼 출력
  • --pretty=oneline 을 추가하면 한 줄로 출력
  • --graph 옵션을 추가하면 히스토리를 그래프 형태로 출력한다.

용어

  • branch: 저장소 내에서 독립적으로 이력을 관리할 수 있는 영역
  • git init으로 저장소 연동을 하면 하나의 브랜치가 자동으로 만들어지는데 이 브랜치의 이름이 master이다.
  • master라는 브랜치는 브랜치 이름이기도 하지만 최신 커밋을 가리키는 참조 개체이기도 한다.
  • HEAD도 커밋을 가리키는 객체이다.
    • HEAD가 특정 커밋을 가리키면 Working Directory의 내용이 그 커밋의 내용으로 변경된다.

git show

특정 커밋의 상세 정보를 볼 때 사용된다.

  • 옵션 없이 사용하면 최신 커밋의 정보를 출력한다.
  • 특정 커밋 정보를 확인하고자 할 때는 git show 커밋해시
    • 해시는 앞 부분의 몇 글자만 입력해도 된다.
    • HEAD의 경우 해시 대신에 HEAD라고 입력해도 된다.

git diff

파일의 수정 또는 변경 사항을 비교하는 명령

  • 옵션 없이 사용하면 Unstaged 상태의 파일(Modified)와 최신 커밋을 비교한다.
  • git add . 명령을 수행한 후 git diff를 해보면 Unstaged된 내용이 없기 때문에 아무것도 나오지 않는다.
  • Staging Area의 파일과 최신 커밋의 비교: git diff --staged
  • 커밋 간의 내용 비교: git diff 이전커밋해시 변경후커밋해시
  • HEAD를 이용한 상대 경로로 비교 가능

git reset

staging을 되돌리는 명령

  • Staging Area에 있는 파일 일부나 전체를 Working Directory로 이동시키는 명령
  • 일부 파일만 언스테이징하고자 하는 경우는 git reset 파일경로

amend

최근에 작성한 커밋 수정

  • 옵션 없이 사용하면 최근에 작성한 커밋에 현재 커밋을 덮어쓰기 한다.
  • git commit --amend -m “메시지”
  • 실제로는 덮어쓰기가 아니고 새로운 커밋을 만들고 이전 커밋을 삭제하는 것이다.

git checkout

커밋을 되돌리는 명령

  • 형식
    • git checkout 커밋 해시
    • git checkout HEAD^ 또는 HEAD~되돌아갈개수
      • git checkout HEAD^^ = git checkout HEAD~2 (2커밋 전)
  • 최신 커밋으로 돌아가고자 하는 경우: git checkout 브랜치이름 ex. git checkout master

커밋 취소

파일 2개를 추가하고 커밋한 상태에서 파일 2개를 삭제하고자 하는 경우

  • 파일을 삭제하고 커밋을 다시 수행: 커밋 이력이 남게 됨
  • 2개의 파일을 추가했던 커밋을 취소

Git은 브랜치 이름으로 참조하는 커밋을 그 브랜치의 최신 커밋으로 인식한다.

  • 브랜치 이름이 참조하는 커밋을 변경하면 이후에 작성된 커밋이 있더라도 무시한다.

옵션 Working Directory Staging Area Repository

--hard 변경 변경 변경
--mixed(default) 유지 변경 변경
--soft 유지 유지 변경
  • 실제로 커밋이 지워진 것은 아니고 브랜치 이름이 가리키는 커밋이 변경된 것이다.
  • 커밋 해시를 알고 있다면 git reset 명령으로 돌아갈 수 있다.
    • reset한 거 복구도 git reset 이전커밋해시 로 가능

HEAD의 참조 이력 확인

  • 커밋 해시를 기억하지 못하는 경우 HEAD의 변경을 추적해서 해시 값을 조회할 수 있다.
  • git reflog

HEAD와 master(main - 브랜치 이름)

branch

  • 저장소 내에 존재하는 독립적인 작업 관리 영역
  • master(main)은 git init으로 생성하면 만들어지는 브랜치
  • 작업 관리 영역을 구분하기 위해서 브랜치에 이름을 부여하는 것이다.

HEAD와 branch

  • 브랜치 이름은 자신의 최신 커밋을 가리키는 포인터이다.
  • HEAD도 특정 커밋을 가리키는 포인터
  • master를 이용해서 간접 참조를 할 수도 있고 직접 참조를 할 수도 있다.
  • Git은 HEAD가 참조하는 커밋의 내용에 따라 Working Directory의 파일 상태를 변경한다.
  • 브랜치 이름은 변경이 가능하지만 HEAD는 공식 명칭이다.
  • Git checkout을 수행하면 HEAD의 참조가 변경된다.
    • checkout을 하게 되면 브랜치 이름은 그 위치 그대로 가리키고 HEAD나 checkout 한 곳으로 이동한다.
    • 이렇게 되면 HEAD와 브랜치 이름이 서로 다른 커밋을 가리키는데 이러한 HEAD를 Detached Head라고 한다.

Git Hub 사용

원격 저장소 생성과 연동

  • 생성: git hub 사이트에 로그인해서 Repository 생성
  • 원격 저장소 등록: git remote add 저장소이름 저장소url
    • git remote add origin ~~~~
  • 원격 저장소 확인
    • git remote -v : url 나온다.
      • fetch: download하는 경로
      • push: upload하는 경로 (이 2개는 거의 대부분 같겠지만 다를 수도 있다.)
    • git remote : 저장소 이름만 나온다.
    • git remote show 저장소이름 : 브랜치 이름까지 나온다.
  • upstream 설정
    • upstream : 브랜치 상호 추적을 위한 설정 (안 하는 경우도 많다.)
      • git push -u(--set-upstream) 원격저장소이름 로컬저장소브랜치이름
      • 이 명령을 수행할 때 로그인이 안 되어 있으면 로그인을 해야 한다.
      • branch ‘master’ set up to track ‘origin/master’. 문장이 나오면 업스트림 설정 성공
      • git remote show origin 명령으로 확인
      • 원격 저장소를 확인하면 저장소에 업로드가 된다.
      • 로컬에서 확인: git log --oneline
      • 업스트림 설정이 되고 나면 다음부터는 git push가 git push origin master와 동일한 효과를 갖는다.

Push와 Pull

파일 내용에 변화가 있으면 로컬 저장소에 commit을 수행해야 한다.

  • git add .
  • git commit -m “메시지”

원격 저장소에 push를 하지 않고 commit만 하고 로그를 확인해보면 저장소가 가리키는 커밋이 다르다.

  • 원격 저장소에 push: git push origin master
  • 업스트림 설정을 한 경우는 git push

git pull

원격 저장소에 업데이트 된 내용 가져오기

tag

  • 부가 정보
  • 커밋을 알기 쉽고 직관적인 이름으로 참조할 수 있도록 하는 기능
  • 태그 종류
    • Lightweight 태그: 태그 이름만 기록
    • Annotated 태그: 태그 이름과 함께 설명, 서명, 작성자 정보, 날짜 등의 정보 포함
  • Lightweight 태그 작성
    • git tag 태그이름 커밋해시
      • git tag v1.0.0 f3ec294
      • git tag v2.0.0 2608c19
  • Annotated 태그 작성
    • git tag -a 태그이름 커밋해시
  • 태그를 붙이면 커밋해시를 쓸 필요가 없기 때문에 버전만 기억하면 되어서 더 편해진다.
    • ex) git show v2.0.0
  • 또한 태그 이름으로 checkout이 가능하다.
    • ex) git checkout v1.0.0
  • 태그 삭제
    • git tag -d 태그이름
      • git tag -d v1.0.0
  • 태그 업로드
    • git push --tags

revert

푸시한 커밋 되돌리기

  • git reset은 브랜치이름의 참조를 특정 커밋으로 되돌리는 명령→ 돌아갈 커밋해시를 대입 (새로운 커밋 안 만들어짐)
  • git revert는 취소하는 내용의 새로운 커밋을 만드는 명령→ 취소하도록 할 커밋해시를 대입 (새로운 커밋이 만들어진다.)
  • 여러 개의 commit을 취소하는 경우는 git revert 커밋해시1 .. 커밋해시2
    • 이때 커밋해시1은 포함되지 않는다.
  • 커밋은 하지 않고 파일 내용만 되돌리고자 하는 경우는 git revert -n 커밋해시
  • reset을 사용해서 원격 저장소와 연동을 하는 경우) git reset을 사용하면 로컬 저장소와 원격 저장소의 커밋이 일치하지 않아서 push를 할 수 없는 상황이 벌어진다.
728x90
반응형

'현대 오토에버 클라우드 스쿨' 카테고리의 다른 글

Git Hub Action & Jenkins  (5) 2025.07.17
Git 협업  (2) 2025.07.16
CI/CD  (1) 2025.07.14
Kubernetes- Volume API, Requests, Limits  (1) 2025.07.11
Kubernetes- Volume API  (3) 2025.07.10