Git/Github 기본 개념
해당 내용은 evan-moon님의 블로그 내용을 정리한 글입니다.
Git이 무엇이고 왜 필요할까?
`깃(Git)`은 분산형 버전 관리 시스템이다.
소스 코드 등의 변경사항, 즉 버전을 관리해주는 시스템인 것이다
Git은 다음과 같은 프로세스를 위한 개념
원격 저장소에 있는 파일을 내 컴퓨터(로컬 저장소)로 복붙 → 로컬 저장소에서 수정 → 원격 저장소로 업데이트
자신이 변경한 로컬의 소스를 원격(서버)의 소스에 업로드하는, 즉 서버로 밀어올리는 행위를 `Push`라고 부름
서버의 소스를 자신의 클라이언트로 가져오는 행위를 `Pull` 또는 `Fetch`라고 부름
원격 저장소는 구글 드라이브와 같은 클라우드 스토리지와 비슷하게 생각하면 된다
전 세계 어딘가에 있는 서버에 우리의 소스를 저장하는 것이다
이때 이 서버를 제공해주는 대표적인 업체가 `깃허브(Github)`인 것이고 이 외에도 GitLab, Bitbucket 등이 있다
Git: 리누스 토르발스가 개발한 분산형 버전 관리 시스템
Github: Git 저장소 호스팅을 지원하는 웹서비스
Git을 사용할 때는 내가 어떤 리모트 서버에 변경 사항을 업로드 할 것인지 정해야하는데
관례적으로 사용되는 이름이 바로 `origin`이다
보통은 한 개의 리모트 서버만 운용하는 경우가 많기 때문에 `remote`와 `origin`을 혼용해서 부르곤 한다
주요 명령어
간단하게만 훑어보고 사용법으로 넘어가자!
명령어 | 설명 |
git clone | Remote → Local / 원격 저장소를 복제해 새 디렉터리로 가져옴 / git clone <URL> |
git add | (선택하기) Local → Stage / 파일 내용을 인덱스에 추가 |
git commit | (포장하기) 바뀐 사항을 저장소에 기록 / `-m` 옵션을 통해 커밋 메시지 작성 (git commit -m "커밋 메시지") |
git push | (보내기) 원격 레퍼런스 및 그와 관련된 오브젝트를 업데이트 |
git pull | Remote → Local / 원격 저장소의 변경사항을 가져온 뒤, 로컬 브랜치에 자동으로 병합 |
git fetch | Remote → Local / 원격 저장소의 변경사항을 가져온 뒤, 로컬 브랜치에는 영향을 주지 않음 |
git status | Stage의 상태를 표시 |
git log | Commit 기록을 표시 / `--oneline` 옵션을 통해 한 줄로 표현 |
git restore | Stage에서 제거: git restore --staged <파일명> |
`push`한 `commit` 삭제 방법 (branch를 혼자 사용하는 경우에만 사용, 이 외의 경우 `revert` 사용)
- local repo의 commit 삭제
- 가장 최근 commit 삭제: git reset HEAD^
- 특정 commit 이후의 commit 삭제: git reset --hard [commit ID]
- remote repo의 commit 삭제 (밀어버리고 덮어쓰기 → `-f` 옵션)
- Github의 commit 삭제: git push -f [origin] [branch name]
사용법
Git 설치
Git - Git 설치
이 책은 Git 2.0.0 버전을 기준으로 썼다. 대부분의 명령어는 그 이전 버전에서도 잘 동작하지만, 몇 가지 기능은 아예 없거나 미묘하게 다를 수 있다. Git의 하위 호환성은 정말 훌륭하기 때문에 2.0
git-scm.com
Mac OS의 경우 Homebrew로 간단하게 설치할 수 있다
brew install git
원격 저장소(Remote Repository) 생성
Github → Repositories → `New`
Repository name 넣고 생성
(나는 우선 `test`라는 이름으로 진행해보겠다)
로컬 저장소(Local Repository) 생성
로컬에서 프로젝트를 진행할 폴더를 생성
(나의 경우 `/Users/git`이라는 경로에서 여러 프로젝트를 관리해볼 예정이다)
`터미널`에서 새로 만든 로컬 디렉토리(프로젝트 폴더)로 이동
(윈도우의 경우 cmd나 git bash 등에서 진행하면 된다)
cd /Users/git # 각자의 로컬 디렉토리 경로
Remote Repository를 생성하고 나왔던 화면인 아래의 화면을 참조하여
생성된 Repository의 주소(https://github.com/kairosial/test.git)를 복사하고
터미널에서 아래와 같이 실행시켜주면 된다
git clone https://github.com/kairosial/test.git # 각자의 주소 사용
그럼 해당 경로에 `test` 폴더(디렉토리)가 생성된 것을 확인할 수 있다
생성된 디렉토리 안으로 이동해보자
cd test
그리고 다음 명령어를 통해 확인해보면
해당 디렉토리 내부에 `.git`이라는 디렉토리가 생성된 것을 확인할 수 있다
(ls 명령어가 없는 윈도우 cmd의 경우 `ls` 명령어 대신 `dir /ah`라고 입력하면 된다)
ls -al
그리고 `터미널`에서 아래의 커맨드를 한 줄씩 순차적으로 실행해보자
(Repository에 대한 초기 설정이라고 볼 수 있다)
echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin <Git URL> # 로컬 저장소와 원격 저장소를 연결 / 'origin'이 원격 저장소의 기본 이름으로 많이 사용됨
git push -u origin main # 변경사항을 원격 저장소 origin의 main에 업로드하고, 해당 브랜치를 추적하도록 설정
⚠️참고사항⚠️ `git push -u origin main` 실행 시 remote: Support for password authentication ~ 에러
[Git] Github에서 토큰 인증 로그인
개인 프로젝트를 진행하던 중 아래와 같은 에러 메시지가 발생했습니다. Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. ... The requested URL returned error: 403 이
leveloper.tistory.com
Personal access tokens 설정 후
git push -u origin main 실행하고
Username에는 Github ID
Password에는 생성한 토큰
⚠️참고사항⚠️: `git branch -M main`은 왜 필요한걸까?

2020년 10월 1일을 기준으로 새롭게 생성되는 repository의 branch 기본값은 master가 아닌 main
그리하여
Git의 branch 기본값은 master
Github의 branch 기본값은 main
나의 경우 branch 기본값을 main으로 사용하기 위해 위에서 언급된
git branch -M main 코드 이용
기본적인 흐름
리모트 서버의 레파지토리에서 소스를 내 컴퓨터에 받아온 뒤 변경사항이 생기면, 그 변경사항을 리모트 서버에 다시 업데이트
`clone` → `파일 수정` → `add` → `commit` → `push`
add
리모트 서버로 보낼 변경사항을 `선택`하는 단계
선택된 변경 사항들은 `스테이지(stage)`라고 불리는 공간으로 이동됨
git add . # 현재 디렉토리의 모든 변경사항을 스테이지에 올린다
git add ./src/components # components 디렉토리의 모든 변경사항을 스테이지에 올린다
git add -p # 변경된 사항을 하나하나 살펴보면서 스테이지 올린다
스테이지에 담긴 변경사항들은 `git status` 명령어를 사용하여 확인 가능
git status # 스테이지의 변경사항 확인
git status -v # 어떤 파일의 어떤 부분이 변경되었는지도 확인
commit
스테이지에 있는 변경사항을 `포장`하는 단계
이때 포장하는 행위를 `commit`이라고 함. 하나의 커밋을 하나의 버전으로 정의하기 때문에 상당히 중요!
git commit -m 'first commit' # 'first commit'이라는 커밋 메세지로 커밋
프로젝트에서 발생한 모든 커밋 히스토리를 `git log` 명령어를 사용하여 조회 가능
git log # 커밋 히스토리 조회
git log --oneline # 각 커밋을 한 줄로 간결하게 표시
git log --graph # 브랜치 병합 및 분기 상태를 시각적 그래프로 표현
push
커밋을 통해 포장된 변경사항을 리모트 서버로 `보내는` 단계
커밋을 푸쉬할 때 Git에게 '어떤 리모트 서버의 어떤 브랜치로 푸쉬할 것인지'도 함께 알려주어야함
git push origin main # origin 리모트 서버의 main 브랜치로 푸쉬
브랜치 이름이 'main' 정도면 모르겠지만, 'SD-0000-request-api-refactoring'처럼 브랜치 이름을 매번 입력하는 것이 번거로울 수 있음
그래서 Git은 브랜치를 자동으로 추적할 수 있는 기능 또한 제공함
git push -u origin main
git push --set-upstream origin main
`-u` 또는 `--set-upstream` 옵션을 사용하면 처음 한번만 브랜치 이름을 입력하고 난 후에는 `git push` 명령어만 입력해도 자동으로 처음 입력했던 브랜치로 변경 사항을 푸쉬할 수 있음
Ref.
Git 뉴비를 위한 기초 사용법 - 시작하기
이번 포스팅에서는 너도 쓰고 나도 쓰고 우리 모두 쓰고 있는 Git의 기초에 대해서 포스팅 하려고한다. 필자는 Git을 대학교 때 처음 접했는데 처음에는 “왠 이상한 클라우드에 소스코드를 올려
evan-moon.github.io
#깃허브 #Git 기초 #Git 기본 #Github 기초 #Github 기본
'Programming > Git, Github' 카테고리의 다른 글
[Git/Github] 다른 사람의 repo를 내 repo로 가져오기 (set-url) (0) | 2023.04.26 |
---|---|
[Git] git bash 에서 conda 명령어 사용 (0) | 2023.03.03 |