기타

yalco) Git hub

hojomu 2023. 3. 5. 17:55

https://www.youtube.com/watch?v=1I3hMwQU6GU

** Yalco 유투브의 GitHub 무료강의를 정리했다.

1 _ 윈도우 세팅

** 설치 시 Git Bash를 반드시 포함시킬 것

 

git config --global core.autocrlf true

협업 시 윈도우와 맥에서 엔터 방식 차이로 인한 오류를 방지

 

 - VS code의 기본 터미널을 Git Bash로 설정

VS code에서 ctrl + shift + p

Select Default Profile 선택

Git Bash 선택 ( Git Bash를 C 드라이브에 설치해야 해당 설정이 가능하다 )

** Git 등 프로그래밍 관련 소프트웨어들은 C드라이브에 설치해야 연계가 원활하다.

 


2 _ Git의 사용 방식

CLI : 터미널에 명령어를 이용하는 방식

GUI : 소스트리 등의 프로그램을 사용하는 방식

 

** CLI 위주로 실습해서 명령어와 동작 방식을 익히고 사용할 때는 작업의 성질에 따라 유리한 것으로 혼용하자.

 


3 _ Git 최소 설정

Git 전역으로 사용자 이름과 이메일 주소 설정  ( github 계정과는 별개 )

 

아래의 명령어로 이름과 이메일을 설정 / 확인할 수 있다.

이름, 이메일 설정
git config --global user.name "(본인 이름)"
git config --global user.email "(본인 이메일)"

이름, 이메일 확인
git config --global user.name
git config --global user.email

기본 브랜치명 변경
git config --global init.defaultBranch main

 


4 _ 프로젝트 생성 , git 관리 시작

원하는 위치에 폴더를 생성하고 VS Code로 열람 한 후

git init

 - 위 명령어를 실행할 경우 해당 폴더에 숨김모드로  .git 폴더가 생성된다 ( 폴더 삭제 시 git 관리내역 삭제 )

 

git status

 - 해당 폴더의 git 관리 상황을 나타낸다

 

 - 특정 파일을 깃의 관리에서 배제하고 싶을 때 ( 비밀분서나 정보를 취급하는 경우 )

 :  .gitignore 파일을 생성, 파일 내부에 배제하고싶은 파일의 이름을 작성한다.

 - .gitignore 파일에 css를 작성하고 저장한 뒤 git status로 확인한 결과 css 폴더를 status 명령어로 찾을 수 없게 되었다.

.gitignore 형석

// 모든 file.c
file.c

// 최상위 폴더의 file.c
/file.c

// 모든 .c 확장자 파일
*.c

// .c 확장자지만 무시하지 않을 파일(this)
!not_ignore_this.c

// logs란 이름의 파일 또는 폴더와 그 내용들
logs

// logs란 이름의 폴더와 그 내용들
logs/

// logs 폴더 바로 안의 debug.log와 .c 파일들 ( 하위 요소 ) 
logs/debug.log
logs/*.c

// logs 폴더 바로 안, 또는 그안의 다른 폴더들 안의 debus.log
logs/**/debug.log

 


5 _ git 프로젝트의 변경사항 저장

 - 파일 git에 저장하기

파일 하나 저장
git add 파일명

모든 파일 저장
git add .

 - git add js 를 실행한 결과, js폴더와 폴더 내부의 .js 파일들이 추가되었다.

프로젝트에서 작업한 것을 버전 별로 따로 저장하고 싶을 때를 제외하고는

git add . 으로 저장하는 것이 일반적이다.

 

 - 변경사항을 version으로 저장하기

git commit

명령어를 실행해서 Vi 입력 모드로 진입,

i 를 눌러 텍스트 입력 모드로 전환, 저장하고싶은 커밋 메시지를 입력한 후 ESC로 명령어 입력 모드로 전환

:wq 명령어를 실행해서 저장하고 종료

 

commit 상태를 확인하고 싶다면 

git log

명령어를 입력해서 언제, 어떤 메시지로 저장되었는지 확인할 수 있다.

First, Second로 Commit한 모습

 - Vi 입력모드로 가지 않고 commit하는 방법

git commit -m "코밋 메세지"

** 해당 방법이 더 편하므로 자주 이용하도록 하자.

 

 - add와 commit을 한번에 [새로 추가된(untracked) 파일이 없을 때 사용 가능]

git commit -am "(메세지)"

소스트리에도 동일하게 commit이 추가된 모습

 


6 _ 과거로 돌아가기

reset과 revert

reset : 되돌아갈 시점으로 돌아간 후 시점 이후에 변경됐던 commit들은 삭제한다.

revert : 되돌아갈 시점으로 돌아가기 위해 해당 시점에서 있었던 변경사항을 반대로 수행한다

따라서 다른 commit에서 변경되었던 사항들에 영향을 끼치지 않게 사용할 수 있다.

 

** revert 시 충돌이 일어날 경우 ( 되돌아가고싶은 시점 이후에 변경사항이 있어서 충돌이 일어나는경우)

revert 수행이 일시적으로 멈추게 된다. 따라서 사용자가 수동으로 해당 충돌에 대한 대처를 진행 한 후

git revert --continue 를 실행한다.

 

reset 명령어
git reset --hard ( 돌아갈 커밋 해시 )

revert 명령어
git revert ( 돌아갈 커밋 해시 )

 - 커밋 해시란 ? log 명령어를 실행시켰을 때 뜨는 commit 우측에 나오는 코드

 


7 _ 여러 Branch 만들기

Brach : 프로젝트를 하나 이상의 모습으로 관리해야 할 때 차원을 나누는 것과 비슷하다

( 하나의 프로젝트 폴더에서 성격이 다른 여러개의 프로젝트로 나누어 관리할 수 있다 )

 

1) 브랜치 생성 / 이동 / 삭제

브랜치 생성
git branch 브랜치이름

브랜치 목록 확인
git branch

특정 브랜치로 이동
git switch 브랜치이름

브랜치 생성과 동시에 이동하기
git switch -c 브랜치이름

브랜치 삭제하기
git branch -d 브랜치이름

new1 브랜치를 생성하고 new1브랜치로 이동하기
new2 브랜치를 생성하면서 이동하기, new2 브랜치 삭제

 - 현재 사용중인 branch는 파란색 글씨의 괄호에 나타난다.

 


8 _ branch를 합치는 두가지 방법

merge : 두 브랜치를 한 커밋에 이어붙인다 ( 브랜치의 사용 내역이 남음 )

rebase : 브랜치를 하나의 브랜치에 이어붙임 ( 한 줄로 깔끔히 정리가 되지만 이어붙일 브랜치는 삭제됨 )

 

1) merge 사용법

기준으로 잡고싶은 branch로 이동 ( 예를들면 main 브랜치)

git merge 붙이고자하는Branch ( new1 이라고 가정 )

해당 명령어를 실행하면 기준 브랜치와 붙일 브랜치가 합쳐진 새로운 커밋이 하나 생성된다.

 

2) rebase 사용법

merge와 반대로 이어붙일 branch로 이동 ( 예를들면 new1 브랜치 )

git rebase main

해당 명령어를 실행하면 new1 브랜치의 작업 기록들이 삭제되고 main 브랜치에 작업 기록을 추가시킨다

이 때 main 브랜치는 new1 브랜치의 작업들이 추가되기 전에 머물러 있게 되기 때문에

main 브랜치로 이동한 후 git merge new1 을 실행해서 main 브랜치의 시점을 new1 브랜치로 fast-forward 해줄 수 있다.

 

** merge , rebase 시 충돌이 일어나 작업이 중단되는 경우

VS code에서 해당 오류를 확인하고 수정한 후 git add . 로 수정본을 올린 다음 작업을 다시 진행 시켜야한다

작업을 다시 진행시키고 싶을 경우
git merge --coutinue
git rebase --coutinue

당장 충돌을 해결하기 힘들 경우 ( 작업을 중단하고 싶을 때 )
git merge --abort
git rebase --abort

 


9 _ 원격 저장소 사용하기

 

 - github 레포지토리 생성 후 복붙 명령어

git remote add origin 원격저장소주소

git branch -M main
-> github 권장 - 기본 브랜치명을 main 으로 설정

git push -u origin main
-> 로컬 저장소의 커밋 내역들 원격으로 push(업로드)
-u 또는 --set-upstream
-> 현재 브랜치와 명시된 원격 브랜치 기본 연결

원격 목록 보기
git remote

원격 지우기
git remote remove 원격이름(origin)

 : 로컬의 git 저장소에 원격 저장소로의 연결 추가

원격 저장소 이름은 보통 origin을 쓰지만 다른 것으로 수정 가능

 

 - github에서 프로젝트 다운받기

git clone 원격저장소주소

 


10 _ push와 pull

git push

 - 작업한 내용을 github에 올린다. 만약 변경된 commit 이 있다면 해당 부분이 github에서도 수정된다.

git push -u origin main 으로 대상 원격 브랜치가 지정되었기 때문에 가능하다.

 

git pull

 - 현재 최신 버전의 commit을 받아온다

 

** github에 push하고싶으면 원격 저장소에 있는 버전보다 내가 가진 버전이 낮으면 안된다.

이런 상황일 경우 pull로 먼저 최신화시킨 다음 push를 해야하는데, pull 하는 방법이 두가지 있다

merge 방식
git pull --no-rebase

rebase 방식
git pull --rebase

 - merge 방식은 local과 원격의 어긋난 시간선을 하나로 맞춘 다음 push 하는 방식이다.

 - rebase 방식은 원격에 맞춰서 원격것을 먼저 붙이고 내가 올리고자 하는 부분을 붙이는 방식이라서

시간상의 진행과정을 보기 더 편하기 때문에 협업시 사용하기 더 좋다

 


11 _ 원격의 브랜치 다루기

 - push로 브랜치를 업데이트 하고싶을 때 해당 브랜치가 원격 저장소에 존재하지 않는다면

git push -u origin 브랜치명

으로 브랜치를 추가하고 push 해야한다.

브랜치의 목록을 vs code에서 확인하고싶다면

git branch --all

 

 - 원격의 브랜치를 가져오고 싶다면

git fetch

마찬가지로 로컬에 해당 브랜치가 존재하지 않는다면

git switch -t origin/브래치명

으로 브랜치를 생성하고 switch해준다.

 

 - 원격의 브랜치 삭제

git push 원격이름(origin) --delete 원격의브랜치명