[Section 1] git 기초

JEREGIM·2023년 2월 16일
0

📌Git이란?

파일을 관리해주는 프로그램

  • 파일의 변경 사항을 추적하며, 사용자가 각 파일의 버전을 관리할 수 있게 도와준다.
  • 파일을 백업할 수 있게 해준다.
  • 협업자들과 함께 파일을 공유하고, 각자의 직업물을 취합할 수 있게 해준다

버전 관리

Git이 관리하는 디렉토리(폴더)에 어떤 문서를 만들면 Git으로 그 문서의 버전을 관리

백업

작업물을 온라인 원격 저장소(Github)에 백업할 수 있도록 백업 기능을 제공

협업

Git은 여러 작업자가 하나의 작업물의 다른 부분을 각자 작업할 때, 작업물을 공유하고 취합할 수 있는 기능을 제공

Git과 Github

Git은 로컬에서 버전을 관리해주는 프로그램을 의미

Github는 Git을 클라우드 방식으로 구현한 서비스


📌Git Workflow

Git의 영역

  • 온라인 : Remote repository(원격 저장소)

  • 로컬 : Work space(작업 공간), Staging area(스테이징 영역), Local repository(지역 저장소)

실습

1. git bash로 Work space에 디텍토리 및 파일 생성

  • mkdir git_practice : 디렉토리 생성

  • cd git_pracitce : 해당 디렉토리로 이동

  • touch hello_git.txt : 파일 생성

  • echo hello codestates > hello_git.txt : 파일에 내용 추가

  • cat hello_git.txt : 파일 내용 출력

2. Git으로 파일 관리 시작(Git 초기화)

  • git init : git init을 입력한 위치의 모든 파일들이 Git의 관리를 받게 된다.

  • git config --global init.defaultBranch main : 앞으로 git init을 입력했을 때에 생성되는 기본 브렌치의 이름을 main으로 설정

  • git branch -m main : 현재 위치하는 브랜치의 이름을 main으로 설정

  • .git : 디렉토리나 파일 이름의 앞에 .이 붙으면 숨김 처리되어 ls 명령어로는 확인 불가

  • ls -al 명령어를 통해 숨김 처리된 디렉토리 및 파일 확인

  • Work space는 Git의 세 가지 영역 중 하나로, Working tree 또는 Work tree라고도 하며, 여러분이 눈으로 볼 수 있는 디렉토리 자체를 의미

  • Git은 Work space를 자동으로 스캔

  • Work space는 git init을 입력한 직후, 다른 어떠한 Git 명령어도 입력하지 않은 상태의 파일들이 존재하는 영역

3. 파일들의 상태 확인

  • git status : Git으로 관리되고 있는 파일들의 상태 확인

  • On branch main : 현재 브랜치가 main 브랜치임을 의미

  • No commits yet : 아직 커밋을 하지 않았다는 의미

  • Untracked files: ~ : Untracked는 Git의 관리 하에 있는 파일이 가질 수 있는 상태 중 하나

  • (use “git add <file>…” to include in what will be committed) : git add 파일_이름을 입력하면 커밋될 것들에 해당 파일을 포함시킬 수 있다는 의미

  • nothing added to commit but untracked files present (use "git add" to track) : 아직 add된 파일들이 없으며 Untracked 상태의 파일이 존재하니, git add 명령어를 사용하라고 안내

3.1. 파일의 상태

  • Untracked : Git에 의해 파일의 상태가 추적되고 있지 않은 상태

  • Tracked : 수정되었을 때 Git이 파일의 변경 내용을 감지

    • Unmodified : 파일의 수정이 Git에 의해 감지되지 않은 상태
    • Modified : 파일의 수정이 Git에 의해 감지된 상태
    • Staged : 파일이 Staging area에 존재하는 상태

3.2. Staging area

Staging area란, Local repository에 저장할 파일들이 임시적으로 대기하는 영역

4. Staging area로 파일 이동

  • git add . : 현재 디렉토리 내의 모든 파일을 스테이징

  • Changes to be committed: ~ : 변화가 감지되었으며, 아래의 파일들을 Commit할 수 있음을 의미

  • (use "git rm --cached <file>..." to unstage) : 새롭게 생성하여 스테이징한 파일을 다시 Work space로 되돌리는 기능

  • git rm --cached hello_git.txt : 스테이징된 hello_git.txt 파일을 다시 Work space(Untracked 상태) 로 되돌리는 기능

5. 파일을 Local repository에 저장하고 버전을 기록

  • git commit -m "First commit" : 스테이징된 파일을 Local repository에 저장. "First commit"은 커밋 메시지

  • [main (root-commit) b3677ac] First commit : 커밋을 실시한 브랜치(main)와 커밋 해시의 앞부분(b3677ac), 그리고 커밋 메시지(First commit)

    • 커밋 해시는 각 커밋마다 부여되는 고유한 ID. 즉, 각 버전에 부여되는 고유 번호
    • 커밋 메시지 작성하는 형식 참조 링크 : 커밋 컨벤션
  • 1 file changed, 1 insertion(+) : 파일이 Tracked 상태로 변화되었음을 의미


Commit을 실시한다는 것은 파일을 Local repository로 이동시키면서 버전을 기록하는 행위

5.1. Commit 내역 확인

  • commit b3677ac2357ac4948edb59e71ab5dd61fdf322a8 : 커밋 해시. Local repository에 파일을 저장하면서 버전을 기록하였고, 해당 버전을 이 커밋 해시로 식별

  • (HEAD - > main)

    • (main)은 해당 Commit 내역이 main 브랜치 내에서 최신 Commit임을 의미
    • HEAD는 여러 브랜치들 중에서 현재 작업 중인 브랜치
  • First commit : 커밋할 때 입력한 커밋 메시지

5.2. 파일의 상태

  • Work space 내의 파일들의 상태가 모두 Unmodified일 때 나타나는 메시지(Tracked 상태)

  • hello_git.txt 파일이 Local repository에 저장된 버전과 Work space 내에 저장된 버전과 차이가 없기 때문에 nothing to commit 메시지가 뜨고 파일이 Unmodified 상태라는 것을 의미한다.

  • echo Git is good >> hello_git.txt : hello_git.txt 파일에 Git is good 내용 추가

  • Changes not staged for commit: : Local Repository의 최신 버전과 Work space의 파일 간의 변화가 감지되었으나 아직 스테이징되지 않았음을 의미

  • modified: hello_git.txt : 변화가 감지된 파일, 색이 빨간색이라는 것은 아직 스테이징되지 않았음을 의미한다.

  • (use "git add <file>..." to update what will be committed) : git add를 사용하여 스테이징할 수 있다고 알려준다.

  • (use "git restore <file>..." to discard changes in working directory) : git restore를 사용하여 변경된 내용을 다시 되돌릴 수 있다고 알려준다.

  • Changes to be committed: : Local Repository의 최신 버전과 Work space의 파일 간의 변화가 감지되었고, Commit이 가능하다.

  • modified: hello_git.txt : 변화가 감지된 파일, 색이 초록색이라는 것은 해당 파일이 스테이징 되었다는 것을 의미한다.

  • (use "git restore --staged <file>..." to unstage) : git restore --staged를 통해 스테이징을 취소할 수 있다.

6. 작업물을 Remote repository에 업로드

6.1. Remote repository 만들기

  • Github 로그인 후 Your repositories 클릭

  • New 버튼 클릭 후 Owner 와 Repository name 정한 후 새로운 원격 저장소 생성

6.2. Remote repository와 Local repository를 연결

  • 새로 만든 Remote repository의 URL 복사

  • git remote add origin URL

    • origin : 원격 저장소 별칭
    • URL : 원격 저장소 URL
  • git remote -v : 명령어를 입력한 위치의 Local Repository와 연결된 Remote repository가 있는지 확인하는 명령어

6.3. 작업물 업로드

  • git push origin main
    • origin : 원격 저장소 별칭
    • main : 브랜치 이름

  • Remote repository에 작업물이 잘 업로드된 것을 확인할 수 있다.

Remote repository의 코드를 로컬로 복사해오기

  • git clone URL : Remote repository 작업물을 Local repository로 복사

  • ls -al : git_practice 디렉토리가 생겼음을 알 수 있다.

  • git remote -v : git clone을 해주면 git remote add를 해주지 않아도 자동으로 Remote repository와 Local repository가 연결되어있다.

혼자 작업 workflow

Fork

: 다른 계정의 Remote Repository를 내 계정으로 가져올 때

Restore

: commit되지 않은 Local Repository의 변경 사항을 폐기할 때 사용

  • git restore 파일명

Reset

: 아직 push하지 않고 Local Repository에만 commit 해놓은 기록을 취소할 때 사용

  • git reset HEAD^ : 가장 최신의 commit 취소

Pull Request

: 내가 Push한 변경 사항에 대해서 다른 사람들에게 알리는 것

함께 작업 workflow

Pull

: 다른 사람의 Remote Repository의 내용물을 내 Local Repo로 가져오기

  • git pull 별칭 브랜치_이름

충돌 상황

: 같은 부분을 수정한 파일이 자동 병합에 실패하고 충돌하게 된다.

충돌 해결

  • git status 명령어를 통해 어떤 파일이 충돌했는지 확인
  • 충돌한 파일을 열어 수정

📌브랜치(branch)

브랜치 생성

git branch 브랜치명

브랜치 삭제

git branch -D 브랜치명

브랜치명 변경

git branch -m "브랜치명" "새로운 브랜치명"

브랜치 이동

git checkout 브랜치명

브랜치 생성과 이동 동시에 하기

git checkout -b 새로운 브랜치명

브랜치 관리

git branch : 현재 등록된 브랜치 확인
git branch -v : 등록된 브랜치의 상세 정보 확인


📌Merge

git merge 브랜치명 : 브랜치명을 현재 checkout된 브랜치에 merge 하는 명령어


📌Stash

git stash : 수정하던 코드를 잠시 임시저장 하는 명령어
git stash pop : 임시저장 했던 코드를 다시 불러오는 명령어
git stash list : 임시저장한 stash 목록을 확인하는 명령어

0개의 댓글