본문 바로가기
ETC/Git

[Git] Git 기초

by 컴돈AI 2023. 12. 12.

목차

    Git 이란?

    • Git은 소스코드 버전 관리 시스템입니다.

    Git 작업 흐름

    • Git에서 작업 흐름은 크게 세 단계로 구분됩니다. 이 세 단계를 통해 파일의 변경 사항을 관리하고 기록합니다.
      • 작업 디렉토리(Working Directory)
      • 스테이징 영역(Staging Area)
      • 저장소(Repository)
    • 작업 디렉토리(Working Directory)
      • 이곳은 사용자가 실제 파일을 편집하고 작업하는 공간입니다.
      • 파일의 수정, 생성, 삭제 등의 작업이 여기에서 이루어집니다.
    • 스테이징 영역(Staging Area)
      • 작업 디렉토리에서 변경된 내용 중 커밋하고자 하는 것들을 선택하여 스테이징 영역에 올립니다.(staging)
        • 작업 디렉토리에서 Staging Area로 파일을 고르는 작업을 스테이징 한다고 말합니다.
      • 이 단계는 저장소에 최종적으로 기록하기 전에 어떤 변경 사항을 포함할지 세밀하게 결정할 수 있는 단계입니다.
      • git add 명령어를 사용하여 변경 사항을 스테이징 영역에 추가합니다.
    • 저장소(Repository)
      • 스테이징 영역에 올린 변경 사항들을 저장소에 커밋합니다.(commit)
      • 커밋은 해당 시점에서의 프로젝트 상태를 스냅샷처럼 저장하는 것으로, 나중에 이 상태로 돌아갈 수 있게 해 줍니다. (일종의 하나의 버전입니다.)
      • git commit 명령어를 사용하여 스테이징 영역의 변경 사항들을 저장소에 기록합니다.

     

    Git 기본 코드

    Git 초기 사용자 정보 등록

    • 새로운 PC(환경)나, Git을 새로 설치한 경우는 사용자 정보를 등록해주어야 합니다.
      • git config --global user.email "내이메일주소"
        git config --global user.name "내이름"
      • 이러한 정보를 등록해 주는 이유는 Git에서 각 커밋에 개인 식별 정보를 포함시키기 위함입니다. 협업을 할 때 누가 코드를 작성하고 수정했는지 알아야 합니다.

    Git 초기 브랜치 세팅

    • git init을 통해 버전관리를 시작하게 되면 기준이 되는 브랜치가 생성되게 됩니다.
    • 이 생성되는 초기 브랜치 이름을 다음과 같이 설정해 줄 수 있습니다.
      • git config --global init.defaultBranch <새로운 브랜치 이름>
      • 보통 github에 맞춰 git config --global init.defaultBranch main으로 많이 작성합니다.
    • 만약 master브랜치로 이미 세팅이 된 경우 다음 코드를 통해 branch 명을 변경할 수 있습니다.
      • git branch -m master main
    • 모든 설정 정보는 다음 코드로 확인 가능합니다.
      • git config --list

    git init

    • git init은 Git을 사용하여 버전 관리를 시작하는 첫 단계입니다.
      • 즉 이 명령어는 새로운 Git 저장소(repository)를 생성하는(초기화) 명령어입니다.
    • 이 명령어를 실행하면, 현재 디렉터리에. git이라는 하위 디렉터리가 생성되고, 이 디렉터리는 해당 프로젝트의 모든 버전 관리 정보(커밋, 브랜치, 태그 등)를 포함합니다.

    git add & commit

    • git add 명령어를 사용하여 변경 사항을 스테이징 영역에 추가하고, git commit 명령어를 사용하여 스테이징 영역의 변경 사항들을 저장소에 기록한다고 했습니다.
    • git add
      • 파일 스테이징 하기
        • git add 파일
      • 여러 파일 스테이징 하기
        • git add 파일1 파일2 파일3 ...
      • 모든 파일 스테이징 하기
        • git add .
      • 참고 : 스테이징 한 파일 취소하기
        • git restore --staged 파일명
    • git commit
      • 스테이징 된 파일들 커밋하기
        • git commit -m "커밋 메시지"
    • 위 기능들은 vscode 에디터에서도 사용이 가능합니다.
      • git add
        • + 버튼을 통해 Staging Area에 Staging 하거나 - 버튼을 통해 Staging Area에서 지울 수 있습니다.
      • git commit
        • Message 부분에 commit message를 입력하고 Commit을 누르게 되면 Repository에 커밋하게 됩니다.

    git log

    • 커밋한 내역들을 보고 싶을 경우 git log 사용
    • git log 옵션
      • 아무런 옵션이 없을 경우 
        • 아무런 옵션 없이 git log만 입력한다면 커밋의 해시, 저자, 날짜, 커밋 메시지를 표시합니다.
      • --oneline 옵션
        • 이 옵션은 각 커밋을 한 줄로 간결하게 표시합니다.
        • 커밋 해시의 축약형과 커밋 메시지만을 보여줍니다.
        • git log --oneline
      • --all 옵션
        • --all 옵션은 현재 체크아웃된 브랜치뿐만 아니라, 저장소의 모든 브랜치에 있는 커밋들을 표시합니다.
        • git log --all
      • --graph
        • 브랜치와 머지 히스토리를 그래프로 표시합니다.
      • --author="이름"
        • 특정 저자의 커밋만을 보여줍니다.
      • --since="날짜", --until="날짜"
        • 특정 기간 동안의 커밋을 보여줍니다.
      • 조합 사용
        • git log --oneline --all처럼 조합해서 사용가능합니다.
        • git log --oneline --all --graph 
          • 참고 : git log --oneline --all 시에 HEAD라는것이 존재하는데 이는 현재 내가 있는 브랜치를 의미합니다.

    git diff

    • git diff을 사용하면 최근 commit과 현재 파일의 차이점을 보여주게 됩니다.
      • 즉, 현재 작업폴더에 변경된 내용들이 최근에 커밋한 내용들과 비교를 하여 차이점을 보여주게 됩니다.
        • " git diff 커밋아이디1 커밋아이디2 "를 통하여 특정 커밋과 특정 커밋 비교도 가능합니다.
      • j / k로 스크롤바 조작 가능
      • q는 종료
    • 굳이 터미널을 이용하지 않고도 vscode 에디터에서 부가기능을 이용하여 git diff를 편하게 볼 수 있습니다.
      • git graph 설치
      • Source Control 창에서 git graph 아이콘을 클릭하면(새로고침 우측에 있는 아이콘) 커밋된 이력들에 대해서 변경사항들을 확인할 수 있습니다. (파일명 클릭)
      • 또한 과거 커밋 이력과 현재 파일과 비교도 가능합니다. (파일명 우클릭 후 View Diff with Working File 클릭)

    git status

    • git status는 다음 정보를 표시해 줍니다.
      • 현재 작업 중인 브랜치 정보
      • 커밋할 변경사항(스테이징 영역의 파일)
      • 커밋되지 않은 변경사항(스테이징 되지 않은 파일)

    참고

    'ETC > Git' 카테고리의 다른 글

    [Git] GitFlow  (0) 2023.12.14
    [Git] GitHub 기본  (0) 2023.12.14
    [Git] commit 취소하기 (git revert) / commit reset하기 (git reset)  (0) 2023.12.14
    [Git] Git commit된 파일로 복구하기 (git restore)  (0) 2023.12.13
    [Git] Git branch / merge  (0) 2023.12.13