git/github 기초

좋은 유튜브 강의를 발견하여 기록 겸 리뷰해본당

https://youtu.be/9MTlFHmyjks?si=AxBwAc9kPT00nMcc


1. git을 설치해 준다

https://git-scm.com/

 

Git

 

git-scm.com

리눅스 유져는 터미널에 

sudo apt update
sudo apt install git

하면 된다.

 


 

 

2. git을 사용할 폴더를 만들어 준다. 

mkdir backbone_project

 


 

3. 

git을 사용하는 터미널을 git bash라고 한다 . mac에서는 자동설치가 되지 않고 window에서는 자동설치된다.

window에서 git bash를 열면 리눅스 명령어를 사용가능하다. 

리눅스는 git bash를 쓸 필요가 없다 그냥 터미널에 기본 명령어 입력하듯이 하면 된다. (cool)

 

기존 리눅스 명령어를 하듯이 git 명령어는 앞에 git을 붙이고 사용하는게 git 명령어이다.

 

 


 

4. 기본적인 git 명령어 예시를 봐보자.

 

>> 최초 설정간 필요한 명령어

git config --global user.name "Your Name"
git config --global user.email "YourEmail@example.com"

 

1. 커밋을 누가 했는지 이름

2. 유져의 이메일 

 

커밋을 했을 때 누가 했는지 정보를 남기기에 해당 정보를 기입하는 명령어이다. 

 

확인 

git config --global --list

 

>>두고두고 쓰는 명령어

 

git init 

현재 위치한 디렉토리를 git 저장소로 초기화한다.

 

git clone <원격 저장소 주소>

git clone https://github.com/user/project.git

 

github와 같은 곳에 올라와있는 it을 복사한다.

 

 


 

5. git의 관리영역 구조

 

git은 

1. working directory 

2. Staging Area 

3. Repository 

 

3개 영역으로 나누어 관리된다.

 

사실상 들어보니 1. 이 유져가 직접 작업하는 공간이고 2.3.은 git이 관리를 위한 가상의 공간이다.

정해진 명령어만 잘 입력해서 쓰면 된다.

 

git은 git 디렉토리의 수정사항을 tracking한다. 

tracking과 수정사항의 유무에 따라 파일을 아래와 같이 분류한다.

 

untracked file : 추적 X

unmodified file : 추적 O 수정 X

modified file : 추적 O 수정 O

 

문서는 1 -> 2 -> 3의 순서로 이동하며 버젼이 저장된다고 보면 된다.

2 -> 3 을 commit이라고 하고, 해당 내용들이 기억된다.

 


 

6. 관련한 명령어를 알아보자

 

git status 

git 프로젝트 상태 확인

 

git add 

1->2로 이동

git add . 하면 전부 이동

git add file.txt. 하면 특정 파일만 이동

 

git commit -m "커밋 메시지"

커밋 메시지에는 어떤 수정사항이 있었는지 간단히 적는다.

 

git log 

commit 이력 확인

 


 

7. .gitignore 

깃 디렉토리 내 수정 이력에서 제외하고 싶은 문서가 잇다면 이를 tracking에서 완전히 제외할 수 있다.

해당 이름의 파일을 만들고 tracking에서 제외하고 싶은 파일의 이름을 해당 파일 안에 넣으면 된다.

 

예를 들어 password나 민감한 개인정보등이 들어간 파일을 git상에 올라가지 않는 것을 원한다면 쓰는 기능이다.

 

 

8. git log 읽기

 

 

요상한 문자열이 커밋 해시라고 한다 : 커밋의 고유값 , 각 커밋의 주민번호 같은 느낌이다.

우측에 HEAD -> master 는 각각

HEAD 현재 작업중인 브랜치를 가리키는 포인터 (참조자)이고

여기서 master는 브랜치명인데, 기존 저장소에서 분기된 저장소의 복사본인 '브랜치' 이름이다 여기서는 master라 master라고 뜬거다. 

아직 두 개념이 제대로는 안나왔으니 쓰르륵하고 지나가자.

 

 

아래 커밋한 작업자의 정보

아래아래는 날짜와 시간

아래아래아래는 커밋을 할때 남긴 메시지이다. git commit -m " 여기에 쓴 메시지 "

 

9. 관련한 명령어를 학습해보자.

 

git log -p

커밋의 변경사항도 같이 출력하는 옵션

 

git log --oneline

log 한줄 요약본

 

git checkout 커밋해시 

문서의 내용을 특정 커밋의 내용으로 되돌리는 명령어

옛날 버전으로 돌아가기 

 

git reflog 

HEAD 포인터의 참조이력을 출력하는 명령어

 

요거를 사용해서 이전 커밋으로 돌아갔다가 relog로 다시 원래 커밋으로 돌아가는 예제는 꼭 해보는게 좋겠다. 

 

 


10. 실수관리하기 

 

 

git reset fail.txt

 

1. working directory

2. Staging Area 

3. Repository 

에서 2->1로 초기화 즉 add 한 특정 파일을 없세준당.

 

git reset  --soft  해시

git reset  --mixed 해시

git reset  --hard 해시

 

 

commit 한것을 되돌리기 할 수 있다. 3개의 옵션에 따라 얼마나 초기화할건지 달라지는데 

soft는 해당 커밋을 취소하고 변경사항은 2.에서 머무른다. (commit한 것 add로 돌아감)

hard는 커밋취소 add도 없어지고 1.에서 수정하던것도 실제로 변경되서 되돌아간다. 

즉 1. working directory 도한 이동한 커밋의 상태로 변경되어 돌아간다. 

mixed는 커밋취소 add취소 1.은 변경없다.

 

git revert 해시

git revert는 특정 커밋의 수정사항을 되돌리면서 되돌린 것 또한 커밋으로 남긴다.

1. 2.의 변화없이 3.의 변화만 있다.

 

해당 명령어를 기반으로 추천되는 실수 대응은 아래와 같다.

 

1. 스테이징 (add 실수)

git reset 파일명

 

2. 커밋 실수 여기서 HEAD^는 직전 커밋을 의미 HEAD~1도 동일

git reset --soft HEAD^     // 커밋만 취소 → 내용은 staging 유지
git reset --mixed HEAD^    // 커밋 취소 + add 취소
git reset --hard HEAD^     // 커밋 취소 + add 취소 + 파일 원상복귀

 

3. 커밋 실수인데 되돌리되 이를 기록하기 (젤 많이 씀)

git revet 커밋해시

 


11. 브랜치

 

전체 코드를 통째로 복사해서 원래 코드와는 상관없이 독립적으로 개발하는 것이 브랜치이다.

나무가 자라다 가지가 뿅하고 나오는 것과 같다.

깃이 처음 git init 하면 master라는 기본 브랜치가 있는데 (기본 브랜치가 main 인 경우도 있다. 단지 이름일 뿐이라 상관 X)

여러 브랜치를 분기해가며 작업할 수 있다.

또한 분기해서 자라나던 것을 병합하는 merge라는 기능 도 있다. 

 

git branch 

현재 브랜치 목록을 보는 명령어

 

git branch 브랜치이름

새로운 브랜치를 생성하는 깃 명령어

 

git checkout 브랜치이름

작업중인 브랜치를 변경하는 깃 명령어

 

git merge 브랜치이름

현재 브랜치에 다른 브랜치의 내용을 합치는 깃 명령어

 

여기서 merge의 경우에는 자동으로 합칠 수 있는 경우에는 자동 merge가 되지만

같은 줄 같은 블록을 서로 다르게 두 branch가 수정한 경우에는 충돌이 발생한다.

이런 경우에 직접 표시된 <<<< >>>>> ===== 

을 직접 선택하고 제거해야 한다. 대충 === 을 경계로 어떤 브런치에서 온 내용인지 표시해준다.

 

 


 

 

12. github

지금까지 local git을 사용하여 버전관리를 하는 방법을 배웠는데, 이를 사용해 흔히 아는 github와 연동하는 방법을 알아보자.

그래피컬한 GUI를 적용하기도 하고 편하다. 온라인에 원격 저장소를 만들어 관리할 수 있다.

 

 

1. working directory

2. Staging Area 

3. Repository 

GIT 의 3개 구조에서 끝에 4. GIT HUB REPO가 추가된다고 보면 된다.

 

관련한 명령어를 알아보자.

 

git remote -v

현재 깃에 저장된 원격 git 저장소를 확인하는 명령어

 

git remote add 원격저장소이름 원격저장소 주소

git을 github repo와 연결하고 별칭을 등록하는 깃 명령어

 

git push 

3.을 4로 이동

 

git pull 

4.를 3으로 가져와 자동 병합하는 명령어

 


github에서 repo를 만드는 창이다.

그냥 repo이름 

아래 privite public 선택

나머지는 신경쓸필요가 아직은 없다.

 

중요하게 봐야할 부분은 해당 내가 만든 repo의 주소이다.

 

git remote add 원격저장소이름 원격저장소 주소

 

해당 주소를 위의 우측에 적어서 연결하면 된다.

 

(base) choi@choi-Victus-by-HP-Gaming-Laptop-16-s1xxx:~/backbone_project$ git remote add backbone https://github.com/helloimsuhyun/backbone_repo.git
(base) choi@choi-Victus-by-HP-Gaming-Laptop-16-s1xxx:~/backbone_project$ git remote -v
backbone https://github.com/helloimsuhyun/backbone_repo.git (fetch)
backbone https://github.com/helloimsuhyun/backbone_repo.git (push)

 

이제 내 로컬 git의 파일을 업로드해보자

 

이 전에 초기 설정이 필요하다.

 

git push -u origin main

 

내가 정확히 어떤 저장소에 어떤 브랜치에 push를 할 것이다 라는 것을 지정하는 작업이다. (초기 1회만 하면 됨, 이후에는 git push 만 해줘도 됨)

origin 저장소에 main 브랜치에 push한다는 뜻 여기서 origin은 

git remote add 원격저장소이름 원격저장소 주소 여기에서 지정한 원격저장소 이름이다.

 

(base) choi@choi-Victus-by-HP-Gaming-Laptop-16-s1xxx:~/backbone_project$ git push -u backbone master 
Username for 'https://github.com': 
Password for 'https://helloimsuhyun@github.com': 

 

** 여기서 유져네임과 비밀번호를 요구하는데 비밀번호가 github 패스워드가 아니라는 함정이 있다.

뭐 토큰을 받아서 항상 복붙해서 쓰는 방식인데 매우 귀찮다 SSH 키를 만들어 내 컴퓨터와 GIT사이이를 연결해주면 비번없이도 로그인 가능 

 

1. ssh-keygen -t ed25519 -C "helloimsuhyun" 

내 컴퓨터에서 SSH 키 생성

 

2. cat ~/.ssh/id_ed25519.pub

출력되는 문자열을 복사

생성된 SSH key를 github SSH and GPG keys에 등록 ssh key 

3. 

git remote set-url origin git@github.com:username/repository.git

과 같이 SSH를 받아서 remote로 이제 ssh로 연결하겠다 선언하면 된다.

 

정리 

1. 내 git local을 repo에 연결하는 경우

git remote add origin git@github.com:username/repository.git

 

2.이미 github에 있는 repo를 가져와서 한는 경우

git clone git@github.com:username/repository.git

(remote안해도 연결되어 있음)

 

3. URL 방식으로 연결되어 있는 것 SSH방식으로 변경

git remote set-url origin git@github.com:username/repository.git

 

 

 

+ Recent posts