본문 바로가기
VCS/GitHub

Git 간단 사용 방법

by Jinger 2024. 7. 10.

서론

     Git 저장소를 사용하기 위해 기본적으로 알아야 할 내용이다. Git을 다운 받았다면, 바탕화면에 새 폴더를 만들고 우클릭을 통해 "Git Bash"(Git Bash Here)을 열면 아래 명령어를 칠 수 있는 cmd창이 뜬다.


사전 지식

    코드를 짜다가 실수를 해가지고, 다시 되돌아가 싶은 적이 있거나 원할 수도 있다. 그러나 일반적으로 코딩했다면 보통은 불가능한 일이다. 만약 되돌리고 2가지가 방법이 있다. 일단 첫 번째, 매일매일 코딩하는 파일의 복사본을 만들어서 어딘가에 보관해 두거나, 둘째, 버전 관리 소프트웨어를 쓰것이다. 편의상 우리는 두 번째 방법을 사용한다. 그중 Git을 효과적으로 사용하려면 몇 가지 기본 개념을 이해하는 것이 중요하다.

원격 저장소 (Remote Repository)

   원격 저장소는 인터넷이나 네트워크를 통해 접근할 수 있는 저장소이다. 팀 협업 시 여러 사람이 같은 저장소에 접근하여 작업할 수 있다. 즉, 원격 저장소는 원격 서버에 작업을 저장해 주는 역할을 한다. GitHub, GitLab, Bitbucket 등이 해당 서비스의 대표이다.

git remote add origin 원격저장소URL

워킹 디렉토리 (Working Directory)

   워킹 디렉토리는 사용자가 작업하고 있는 실제 파일과 디렉터리가 있는 공간이다. 이는 파일 시스템의 디렉토리로, 프로젝트 파일을 수정하고, 추가하거나 삭제할 수 있는 물리적인 작업 공간을 의미한다. 즉, 코드와 파일을 편집하고 현재 작업 내용을 보는 공간이다. 워킹 디렉터리는 로컬 파일 시스템에 위치해 있고 git status로 워킹 디렉토리의 상태를 확인할 수 있다.

git status

로컬 저장소 (Local Repository)

    로컬 저장소는 Git이 버전 관리를 수행하는 저장소이다. 이는 `.git` 디렉토리 안에 저장된 데이터로, 모든 커밋, 브랜치, 태그 등이 저장된 데이터베이스이다. 워킹 디렉토리와 달리, 로컬 저장소는 파일의 버전 히스토리를 관리한다. 로컬 저장소는 `.git` 폴더 안에 저장된 데이터베이스로 모든 커밋, 브랜치, 태그 정보가 포함되어 있다. Git 명령어로 접근 및 관리할 수 있다. (`git log`, `git show` 등)

git log

워킹 디렉토리와 로컬 저장소의 차이점

   이 둘이 보통 같은 것을 가리키는 경우가 많기에 헷갈릴 수 있다. 워킹 디렉토리는 현재 작업 중인 실제 파일과 디렉토리로 사용자가 파일을 수정하고 저장하는 곳이다. 로컬 저장소는 Git이 버전 히스토리를 저장하는 곳으로 커밋, 브랜치, 태그 등이 저장된 데이터베이스이다.

스테이징 영역 (Staging Area)

   스테이징 영역은 커밋을 하기 전에 변경 사항을 모아두는 중간 영역이다. 이곳은 커밋할 파일과 변경 사항을 임시로 저장하는 공간이다. 대표적으로 `git add` 명령어를 사용하여 파일을 올리는 공간이 스테이징 영역이다.

git add 파일명

브랜치 (Branch)

    브랜치는 독립적으로 작업을 진행할 수 있는 하나의 흐름이다. 기본적으로 `main` 또는 `master` 브랜치가 있으며, 새로운 기능이나 버그 수정을 위해 브랜치를 나누어 작업할 수 있다. `git branch 브랜치명`으로 새 브랜치 생성, `git checkout 브랜치명`으로 브랜치 전환한다.

git branch 새브랜치명
git checkout 새브랜치명

전체적인 흐름 예시

1. 워킹 디렉토리에서 파일을 수정한다.
2. 변경된 파일을 스테이징 영역으로 추가한다.

git add 파일명

3. 스테이징 영역에 있는 변경 사항을 커밋한다.

git commit -m "커밋 메시지"

4. 새로운 브랜치를 만들고 전환한다.

git branch 새브랜치명
git checkout 새브랜치명

5. 로컬 저장소의 변경 사항을 원격 저장소로 푸시한다.

git push origin 브랜치명

 

   이와 같은 과정으로 Git은 버전 관리를 수행하며, 이를 통해 팀 협업과 효율적인 프로젝트 관리를 가능하게 한다.(단, 위 예시는 변경 사항이 많을 경우 3과 4 과정을 바꿔 미리 브랜치를 만들고 작업하는 것이 더욱 좋다.)


기본

   Git의 주요 명령어 중 `clone`, `pull`, `add`, `commit`, `push`는 프로젝트의 버전 관리와 협업을 위해 자주 사용된다. 각각의 명령어가 무엇을 하는지 자세히 알아보자.

클론 (git clone)

    `git clone` 명령어는 원격 저장소를 복제하여 로컬에 새로운 저장소를 생성한다. 이는 프로젝트를 처음 시작할 때, 팀 프로젝트에 참여할 때, 또는 다른 위치에서 작업을 시작할 때 주로 사용된다.

  git clone <원격 저장소 URL>
  git clone https://github.com/username/repo.git

풀 (git pull)

   `git pull` 명령어는 원격 저장소의 변경 사항을 로컬 저장소로 가져오고, 현재 브랜치에 병합한다. 이는 `git fetch`와 `git merge`를 결합한 명령어이다.

  git pull
  git pull origin main

애드 (git add)

    `git add` 명령어는 워킹 디렉토리에서 변경된 파일을 스테이징 영역에 추가한다. 이는 다음 커밋에 포함할 변경 사항을 선택하는 단계이다.

  git add <파일명>
  git add index.html
  git add .   # 모든 변경 사항을 추가

커밋 (Commit)

    커밋은 변경 사항의 스냅샷을 저장하는 것이다. 커밋은 스테이징 영역에 있는 모든 변경 사항을 저장소의 기록으로 만든다. 변경 사항의 스냅샷을 저장하여 프로젝트의 히스토리를 만든다.

커밋 (Commit)

    커밋은 변경 사항의 스냅샷을 저장하는 것이다. 커밋은 스테이징 영역에 있는 모든 변경 사항을 저장소의 기록으로 만든다. 변경 사항의 스냅샷을 저장하여 프로젝트의 히스토리를 만든다.

git commit -m "커밋 메시지"
git commit -m "Fixed bug in user login feature"

푸시 (git push)

    `git push` 명령어는 로컬 저장소의 변경 사항을 원격 저장소에 업로드한다. 이는 로컬 커밋을 원격 저장소에 반영하여 다른 팀원들과 공유할 수 있게 한다.

  git push <원격 저장소 이름> <브랜치 이름>
  git push origin main

페치 (git fetch)

    `git fetch` 명령어는 원격 저장소의 변경 사항을 로컬 저장소로 가져온다. 이 명령어는 원격 저장소의 커밋, 브랜치, 태그 등을 로컬 저장소에 업데이트하지만, 현재 작업 중인 브랜치에는 자동으로 병합하지 않는다.

  git fetch <원격 저장소 이름>
  git fetch origin

 

   이 명령어를 사용하면 원격 저장소의 변경 사항을 확인할 수 있으며, 이후에 병합할지 여부를 결정할 수 있다.

머지 (git merge)

   `git merge` 명령어는 두 개의 브랜치의 변경 사항을 하나로 병합한다. 일반적으로 다른 브랜치에서 작업한 내용을 현재 체크아웃한 브랜치에 합치는 데 사용된다.

  git merge <브랜치 이름>
  git merge feature-branch

체크아웃 (git checkout)

    `git checkout` 명령어는 다른 브랜치로 전환하거나 특정 커밋의 상태로 워킹 디렉토리를 변경한다. 이를 통해 과거의 특정 시점으로 돌아가거나 다른 브랜치에서 작업을 시작할 수 있다.

git checkout <브랜치 이름>
git checkout develop
git checkout -b new-branch   # 새로운 브랜치를 만들고 전환

 

   이러한 명령어들은 Git에서 다양한 상황에 맞게 사용되며, 소스 코드의 버전 관리와 협업을 원활하게 하는 데 중요한 역할을 한다.


무작정 따라 하기

첫 세팅

   폴더 생성하여 저장소 초기화하고 사용자 설정한다.

git init
git config --global user.name "사용자 이름"
git config --global user.email "사용자 이메일"

클론 만들기

   원격 저장소에 있는 파일을 복사하여 작업할 준비를 한다.

git clone 원격저장소URL 새폴더이름

작업

  깃 작업에 큰 흐름은 다음과 같다. "fetch -> pull -> commit -> pull -> push" 이 과정을 함께 보자.

작업 전 현재 원격 저장소를 최신화해둔다.

git fetch
  • 만약 내가 작업할 곳에 변경이 있다면 받아둔다.
git pull
  • 브랜치를 생성하고 싶다면 아래와 같이 생성하면 된다.
git branch  브랜치명
  • 변경 사항을 올리고 싶다면 매번 아래 과정을 반복한다.
git add .
git commit "내용"
  • 변경이 전부 끝나면 원격으로 올려준다.
git push
  • 브랜치1에서 브랜치2를 머지를 할 예정이면 다음과 같이 한다.
git merge 브랜치명1 브랜치명2

명령어

Git 명령어

     "git 명령어 혹은 옵션" 형태로 명령어를 실행하고 여러 명령어를 동시에 실행할 때 명령어 사이에 ";"(콜론)을 추가하여 실행할 수 있다. "."은 현재 폴더를 의미한다. 일부 옵션은 생략이 가능하며 "-" 짧은 옵션, "--" 긴 옵션을 보여준다.

더보기
  • git status: 현재 상태 확인
  • git log: 전체 로그 확인 
  • git init: git 저장소 생성하기
  • git clone [https: ~~~~ ]: 저장소 복제 및 다운로드
  • git add 파일이름: 저장소에 코드 추가
  • git add *: 저장소에 모두 코드 추가
  • git add -A: 커밋에 파일의 변경 사항을 한번에 모두 포함
  • git commit -m "message": 커밋 생성
  • git push origin master: 변경 사항 원격 서버 업로드 (push)
  • git pull: 원격 저장소의 변경 내용을 현재 디렉토리로 가져오기 (pull)
  • git fetch: 원격 저장소 변화를 현재 로컬 저장소에 적용한다.
  • git diff [브랜치 이름] [다른 브랜치 이름]: 변경 내용을 merge 하기 전에 바뀐 내용 비교
  • git init: 깃 초기화, git init을 설정하면 해당 폴더에 ".git" 이라는 파일이 생성됨
  • git remote add origin [github 주소]: github 주소와 연결
  • git branch [브랜치명]: 브랜치 생성
  • git checkout [브랜치명]: 해당 브랜치로 이동
  • git branch -d [브랜치명]: 브랜치를 삭제(깨끗한 상태에서만)
  • git branch -D [브랜치명]: 브랜치 강제 삭제
  • git branch: 원하는 브랜치로 이동했는지 확인
  • git branch -a: 모든 브랜치 확인
  • git add .: 파일 및 폴더 add
  • git commit -help: 커밋 옵션 명령어 확인
  • git commit -m "commit message": 커밋
  • git commit -a: 커밋을 하기 전에 자동으로 모든 파일을 등록하는 과정을 미리 수행
  • git commit -am "커밋메시지": -a와 -m을 동시 실행, 파일 등록과 커밋 메시지
  • git push origin [브랜치명]: 원하는 브랜치로 push하여 원격 서버에 전송
  • git branch -d [브랜치 이름]: 브랜치 삭제
  • git merge [다른 브랜치 이름]: 현재 브랜치에 다른 브랜치 수정사항 병합
  • git revert : 
  • git rebase
  • git reset:
  • git tag

    환경 설정 파일을 직접 수정하지 않고도 설정을 쉽게 할 수 있게 도와준다.

  • git config -help: config 명령어 확인
  • git config --list: 전체 config 리스트 확인
  • git config user.name "사용자이름": git config 설정하는 방법
    git config user.email "이메일 주소"

    로컬 사용자 등록은 로컬 저장소를 생성할 때마다 설정해야 한다. 만약 혼자서 사용하는 컴퓨터라면 글로벌 사용자 등록으로 편하게 사용할 수 있다.

  • git config --global user.name "사용자이름"
    git config --global user.email "이메일 주소"
  • git config --unset user.name: git config 삭제하기 
    git config --unset user.email
  • git config --unset --global user.name: 삭제해도 계속 남아있는 경우 global 옵션을 주어 설정했을 것임
    git config --unset --global user.email: , global로 설정된 사용자를 지울 경우 아래와 같이 global 추가

 Git stash

Git 기타

  • git help --all: 모든 명령어 확인
  • git --version: 깃 버전 정보 확인
  • git rm --cached [스테이지 영역]: 스테이지 영역에서만 등록된 파일 삭제
  • git mv 파일이름 새파일이름: 깃에서 파일 이름 변경

.gitignore 파일

   .gitignore은 해당 파일을 무시하고 진행하기 위해 사전에 미리 정해두는 파일이다. 예를 들어, jpg 파일을 올리기 싫으면 *.jpg로 작성하면 된다. 혹은 특정 파일을 올리기 싫으면 해당 파일 이름과 파일 형태를 같이 작성해 주면 된다. 만일 파일 이름이 같고 위치가 다르다면 "/"를 이용해서 위치를 추적할 수 있게 해야 한다.

   즉, "#"로 주석을 표현할 수 있고, "*" 애스터리스크 기호라 하여 모든 문자열을 대체할 수 있다. "!"는 부정을 의미하며 여기서는 제외하면 안 되는 필요한 파일을 의미한다. "/"로 디렉토리를 표현하여 위치를 정해주기 위해 사용된다.

그 외

   Head는 현재 내가 있는 위치를 말한다. 커밋ID는 커밋을 만들 때 생성되면서 해당 커밋을 가리키는 아이디를 말한다. git과 같은 유명 VCS는 개발툴, 프로젝트 관리 등과 연동을 할 수 있는 경우도 있다. 이를 잘 활용하면 더욱 편하게 사용할 수 있다.


주섬주섬

     CLI로 사용하면 실수를 종종 하게 된다. 그렇기에 이를 대신해 주는 GUI로 주로 사용한다. 그러니 해당 GUI가 어떤 명령어를 대신해 주는지 이해하고 넘어가도 상관이 없다. 그럼에도 GUI로 한계가 종종 느껴질 때가 있다. 그럴 때에는 어쩔 수 없이 CLI로 해결할 수밖에 없다.

     브랜치, 사용자 이름, 이메일 주소 등을 한글로 적으면 오류가 생긴다.

참고

 

Git - Book

 

git-scm.com

 

누구나 쉽게 이해할 수 있는 Git 입문~버전 관리를 완벽하게 이용해보자~ | Backlog

누구나 쉽게 알 수 있는 Git에 입문하신 것을 환영합니다. Git을 사용해 버전 관리를 할 수 있도록 함께 공부해봅시다!

backlog.com

추천

 

VCS 프로젝트 브랜치 전략

서론   한 프로그램을 만드는 데 많은 사람들이 투입된다. 그중 코딩은 서로 얽히고 얽혀 개발 과정이 매우 복잡한 형태가 된다. 아무 전략을 세우지 않고 하다 보면 아무리 서로에게 보고를 잘

jinger.tistory.com

 

반응형

'VCS > GitHub' 카테고리의 다른 글

깃허브 Wiki  (0) 2023.04.17
깃허브 Project  (0) 2023.04.17
깃허브 Discussion  (0) 2023.04.16
깃허브 Issues  (0) 2023.04.13
GitHub 시작하기  (0) 2023.03.22

댓글