Git 의 모든 것

ShinMinChul·2024년 6월 1일

Interesting IT storys

목록 보기
2/4
post-thumbnail

Git은 무엇인가?

Git 은 Distributed Version Control System(DVCS,분산 버전 관리 시스템) 이다. 소프트웨어 개발 과정에서 소스 코드의 변경 사항을 추적하고, 여러 사람이 동시에 하나의 프로젝트에 기여할 수 있도록 도와주는 도구 입니다.

Git 을 사용하게 되면 Local repository , Remote repository(로컬 저장소, 원격저장소)을 알아야 하는데, 로컬 저장소는 본인의 컴퓨터를 의미하며, 원격 저장소는 서버 컴퓨터를 의미한다. 이러한 원격 저장소의 용도로 Github가 개발되었다.

원격 저장소의 사용 이유는, 원격 저장소에 파일을 저장해 두면 내 컴퓨터에서 파일이 손상되었다고 하더라도 원격 저장소에서의 원래 파일을 그대로 가져올 수 있다. 여러가지 측면에서 유지 보수 및 관리에 상당한 장점이 있기 때문에 Github 와 같은 원격 저장소를 사용한다.

Git 기본 사용법

  • git init : 새로운 Git 리포지토리를 초기화합니다. 이 명령어는 프로젝트 디렉토리에서 실행되며, .git 디렉토리를 생성하여 Git이 해당 디렉토리를 리포지토리로 인식하게 합니다.

  • git clone [repository url] : 원격 리포지토리를 로컬로 복제(clone)합니다. 이 명령어는 주어진 URL로부터 리포지토리의 전체 내용을 복사하여 새로운 디렉토리에 저장합니다

  • touch [ ] : 새로운 파일을 생성합니다. 이 명령어는 Git 자체의 명령어는 아니지만, 파일을 생성하여 Git에 추가할 때 유용하게 사용됩니다.

  • git add [ ] : 변경된 파일을 스테이징 영역에 추가합니다. 이 명령어는 커밋하기 전에 파일의 변경 사항을 추적하도록 합니다.
    [.] 은 모든 파일을 스테이지로 올린다는 것이며, 특정 파일명을 입력하여 하나의 파일만을 스테이지에 올릴 수도 있다.

  • git commit [-m] ["commit message"] : 스테이징 영역에 있는 변경 사항을 로컬 리포지토리에 커밋합니다. 커밋 메시지를 통해 변경 사항에 대한 설명을 추가할 수 있습니다.

  • git push [remote] [branch] : 로컬 리포지토리의 커밋을 원격 리포지토리에 푸시(push)합니다. 보통 origin이 기본 원격 리포지토리 이름이며, main 또는 master가 기본 브랜치 이름입니다.

  • git status : 현재 작업 디렉토리의 상태를 확인합니다. 변경된 파일, 스테이징 상태, 커밋되지 않은 변경 사항 등을 보여줍니다.

  • git diff [] : 워킹 디렉토리와 스테이징 영역 간의 변경 사항을 비교하여 보여줍니다. 특정 파일이나 커밋 간의 차이도 확인할 수 있습니다.
    [] 에는 HEAD --staged 를 사용할 수 있습니다.

  • git log [] [] : 리포지토리의 커밋 내역을 조회합니다. 각 커밋의 해시, 작성자, 날짜, 메시지 등을 볼 수 있습니다.
    [] 에는 다양한 옵션이 있으므로, 추가 참고 자료를 확인하시기 바랍니다. Git log의 다양한 옵션들

  • git pull : 원격 리포지토리의 변경 사항을 로컬 리포지토리에 가져와 병합합니다. git fetch와 git merge를 한 번에 수행합니다.

Git Branch 관리

  • git branch [] [branch] : 브랜치를 생성, 나열, 삭제하는 등 브랜치와 관련된 다양한 작업을 수행합니다. Git에서 브랜치는 특정 커밋을 가리키는 포인터로, 서로 다른 개발 작업을 분리하여 진행할 수 있게 해줍니다.

  • git checkout [] [] : 다른 브랜치로 전환하거나, 워킹 디렉토리의 파일을 특정 버전으로 되돌립니다. 이 명령어는 현재 작업 중인 브랜치를 변경하거나, 과거의 특정 커밋으로 작업 상태를 되돌리고 싶을 때 사용됩니다.

  • git merge [] : 두 개의 다른 브랜치를 병합합니다. 이 명령어는 현재 브랜치에 다른 브랜치의 내용을 통합할 때 사용됩니다. 병합 과정에서 충돌(conflict)이 발생할 수 있으며, 이를 수동으로 해결해야 할 수도 있습니다.

  • git switch [] [branch] : Git 버전 2.23 이상부터 도입된 명령어로, 기존의 git checkout 명령어의 일부 기능을 대체하며, 더 명확하고 직관적인 브랜치 전환 및 생성기능을 제공합니다. 추가 옵션은 아래와 같습니다.
    -c : 새로운 브랜치를 생성하고 전환하기
    --detach : 현재 작업 디렉토리의 변경 사항을 버리고 브랜치를 전환하기
    --discard-changes : 특정 커밋을 체크아웃하여 분리된 HEAD 상태로 만듭니다.

  • git restore [] [file-path] : 해당 명령어 또한 switch 와 함께 2.23 이상 부터 도입된 명령어로, switch 와 설명이 같습니다. 해당 명령어는 작업 디렉토리나 인덱스(Staging Area)의 변경 사항을 복원하는데 사용됩니다.
    이 명령은 지정된 파일의 작업 디렉토리에서의 변경 사항을 복원합니다. 변경 사항은 사라지고, 마지막 커밋 상태로 파일이 복원 됩니다. 추가 옵션은 아래와 같습니다.

    --staged : 지정된 파일의 인덱스(Staging Area)에서의 변경 사항을 복원합니다. 즉 스테이징된 변경 사항을 취소합니다.
    --source : 복원할 소스를 지정합니다. 기본값은 HEAD 이며, 특정 커밋이나 브랜치를 지정할 수 있습니다. 예시) example-branch 의 상태로 파일 복원시 --source=example-branch 의 형태로 입력합니다.
    --worktree : 명시적으로 작업 디렉토리의 변경 사항을 복원하도록 지시합니다.

Git 고급 사용법

  • git revert [commit-hash] : 기존 커밋을 되돌리는 새로운 커밋을 생성합니다. 이 방법은 이전 상태로 돌아가면서도 히스토리를 보존할 수 있어 협업 시 유용합니다

  • git reset [] [] : 커밋 히스토리를 되돌리거나, 인덱스(Staging Area) 및 작업 디렉토리의 상태를 변경합니다. 추가 옵션은 아래와 같습니다.

    --soft : HEAD를 이동하지만 인덱스(Staging Area)와 작업 디렉토리는 변경하지 않습니다.
    --mixed : HEAD 와 인덱스(Staging Area)를 이동하지만 작업 디렉토리는 변경하지 않습니다.
    --hard : HEAD와 인덱스(Staging Area), 작업 디렉토리 모두 지정한 커밋 상태로 되돌립니다.

  • git rebase [upstream] [branch] : 한 브랜치의 변경 사항을 다른 브랜치의 앞부분으로 이동시켜 히스토리를 재구성합니다. 이를 통해 깔끔한 커밋 히스토리를 유지할 수 있습니다.
    -i 옵션을 사용하여 rebase 과정을 좀더 상세하게 제어할 수 있습니다.

  • git tag [] : 특정 커밋에 태그를 붙여 중요한 지점을 표시합니다. 주로 릴리즈 버전을 관리할 때 사용됩니다
    주석이 있는 태그를 생성하고 싶은 경우에는
    git tag -a [] -m "message" 와 같이 입력하여 사용합니다.
    태그 목록을 확인하고 싶다면 git tag 를 입력합니다.
    푸쉬 작업간에도 git push origin [~~] 이와 같은 명령어를 통해 태그를 푸쉬할 수 있습니다.

gitignore 파일 설정

.gitignore 파일은 Git 버전 관리 시스템에서 특정 파일이나 디렉토리를 추적하지 않도록 지정할 때 사용합니다. 해당 파일은 프로젝트의 루트 디렉토리에 위치시키며, 프로젝트에 따라 여러 개의 .gitignore 파일을 다른 디렉토리에 배치할 수도 있습니다.

자세한 사용 방법은 해당 사이트를 참고하길 바란다.
.gitignore 적용하기

profile
개발은 예술이며, 나는 예술가다.

0개의 댓글