Github 체크아웃 방법, fetch 와 pull, 병합시 사용하는 merge 와 rebase, 브랜치 다루는 방법은 아래 포스팅을 참고하세요. 

👉https://gosasac.tistory.com/72

 

[Git] - Github 체크아웃, fetch 와 pull, merge 와 rebase, 브랜치 다루기

git - 프로젝트 관리시작, commit, push, 프로젝트 원격지로 올리는 법, 원격지 연결 해제 방법은 아래 포스팅을 참고하세요 👉https://gosasac.tistory.com/71 git - 프로젝트 관리시작, 브랜치명 변경, 커밋,

gosasac.tistory.com

 

 

🟥 파일의 삭제와 이동

* 삭제

파일은 그냥 삭제하면 Working directory에 남아있습니다.

git rm 파일명

git rm 으로 삭제하면 파일의 삭제가 Staging area에 있습니다.  

 

* 이동(or 이름변경)

mv 명령어를 이용하면 이동이나 이름변경이 가능합니다.

git mv 원본파일명 변경할파일명

 

 

 

🟥 커밋하지 않은 파일 되돌리기 [reset]

 

* 파일을 Staging area 에서 Working directory로 되돌리기

git restore --staged 파일명

 

 

* add가 안된 상태에서 파일을 수정 이전상태로 되돌리기

git restore 파일명

 

* stage에 올라가지 않은 모든 변화들 원복시키기

git restore .

 

* stage안에 있는것들 까지 모두 되돌리기

git reset --hard

❗ reset의 세가지 옵션

1. --soft : repository에서 staging area로 이동

2. --mixed(default) : repository에서 working directory로 이동

3. --hard: 수정사항 완전히 삭제

 

 

 

* 특정 파일만 git의 특정과거 시점으로 되돌리기(Working directory의 파일만 가능합니다)

git restore --source=해시값 파일명

* 특정 리비전에 대한 해시값은 아래 reflog를 통해 확인할 수 있습니다.

 

 

 

🟥 reset 되돌리기 [reflog]

* reset으로 커밋 15개 되돌리기

git reset --hard HEAD~15

각 브랜치에서 가장 마지막(최신의) 커밋 위치를 HEAD 라고 표현합니다. 

HEAD에 물결(~)을 붙이면 HEAD를 기준으로 뒤로 이동하고 윗꺾새(^)를 붙이면 앞으로 이동한다는 의미입니다. 

(reset으로 삭제한 건 git log로도 볼 수 없습니다. )

 

 

* 모든 깃 작업내용 보기 (특정 리비전의 해시값 확인)

git reflog

빨간 박스 안에 보이는 문자열이 각 리비전의 해시id 입니다.

해당 해시값을 이용해 원하는 시점으로 되돌아 갈 수 있습니다.

 

 

* reset 전 해시값을 이용해 다시 reset

git reset --hard 해시값

git - 프로젝트 관리시작, commit, push, 프로젝트 원격지로 올리는 법, 원격지 연결 해제 방법은 아래 포스팅을 참고하세요

👉https://gosasac.tistory.com/71

 

git - 프로젝트 관리시작, 브랜치명 변경, 커밋, 푸쉬, 원격저장소 올리는법

git - 설치 방법은 아래 링크 참고 👉https://gosasac.tistory.com/69 git - 설치(CLI와 GUI[sourcetree])와 최초 설정 방법 🟥 윈도우 Git 설치 https://git-scm.com/ 에서 Git을 다운로드 합니다. ⭐설치과정에서 Git Bash

gosasac.tistory.com

 

 

 

🟥 GItHub에서 프로젝트 다운받기

 github 페이지에서 checkout 받고자하는 프로젝트의 [< > Code ] 탭과 [< > Code ]  버튼을 찾아가면, 

아래와 같은 HTTPS URL확인이 가능합니다. 

우측의 버튼을 눌러 복사합니다. 

 

 

이제 로컬에서 터미널이나 Git Bash에서 체크아웃 받고자 하는 대상 폴더로 이동한 후에 아래 명령을 실행합니다. 

git clone 원격지주소

이후 아래 fetch 와 pull 명령어를 통해 소스를 가져옵니다. 

 

❗ checkout 명령어가 Git 2.23 버전부터 switch, restore로 분리되었습니다. 

git switch 브랜치명

 

 

 

 

🟥 fetch vs. pull

fetch : 원격 저장소의 최신 커밋을 로컬로 가져오기만 합니다.

pull : 원격 조장소의 최신 커밋을 로컬로 가져와 merge 또는 rebase를 진행합니다.

 

즉, pull에는 기본적으로 fetch가 포함되어 있습니다.

 

fetch를 이용하면 원격지의 새 branch(ex. new-branch) 내용을 바로 내 작업본에 pull하지 않고, 소스를 확인만 하는 것이 가능합니다.

 

git fetch
git pull

 

🔸 pull할 것이 있을 때 push를 하게 되면 ?

원격 저장소에 먼저 적용된 새 버전이 있는 경우에는 push가 불가능합니다. 

pull을 이용해 원격의 버전을 받아온 이후에 비로소 push를 할 수 있습니다. 

 

 

 

🟥 브랜치를 합치는 두 가지 방법. [merge 와 rebase]

 

* merge 방식

두 개의 가지를 이어 붙이는 작업으로 대상 브랜치에 적용시, 커밋이 한 번 더 생기게됩니다. 

-merge 방식으로 pull하는 명령어

git pull --no-rebase

 

* rebase 방식

브랜치의 마디 커밋들을 대상 브랜치로 모두 옮겨붙이는 것입니다. 

- rebase 방식으로 pull하는 명령어

git pull --rebase

 

merge방식과 rebase 방식의 결과물은 동일하지만, 브랜치의 사용 내역을 남길 필요가 있다면 merge.

브랜치 사용내역이 별로 중요하지 않고, 히스토리를 깔끔하게 유지하고 싶다면 rebase를 진행하면 됩니다.

 

 

 

* merge로 합치기 

main브랜치에 sub 브랜치를 merge 하기.

git switch main
git merge sub
git branch -d sub  // sub 브랜치 삭제

 

 

* rebase로 합치기

sub 브랜치를 main 브랜치로 rebase 하기.

git swtich sub    // ⭐ merge 때와는 달리 rebase시킬 브랜치로 이동합니다.
git rebase main

여기까지 진행 후, 소스트리와 같은 GUI툴로 상태를 확인해 보면, main 브랜치는 뒤쳐져 있는 상황이 됩니다. 

따라서 main 브랜치로 다시 이동해서, sub의 시점으로 fast-forward 작업이 필요하죠.

merge할 때와 동일한 방식으로 진행하면 됩니다. 

git switch main
git megre sub
git branch -d sub

 

 

 

🟥 브랜치 다루기

브랜치는 프로젝트를 하나 이상의 모습으로 관리할 때 와 

여러 작업들을 각각 독립적으로 진행할 때 사용합니다.

 

- new-branch 라는 브랜치 생성

git branch new-branch

 

- 생성된 브랜치 확인

git branch

 

- 모든 브랜치 확인(원격지에 있는 브랜치까지) [-a]

git branch --all
git branch -a

 

- old-branch 라는 브랜치로 이동

git switch old-branch

*checkout 명령어가 Git 2.23버전부터 switch, restore로 분리되었습니다. 

 

 

- 브랜치(baby-branch) 생성과 동시에 이동하기 [-c]

git switch -c baby-branch

 

 

- 브랜치 삭제하기 [-d]

git branch -d 브랜치명

지울 브랜치에 다른 브랜치로 적용되지 않은 내용의 커밋이 남아있을 시에는 -D(대문자) 옵션을 이용해 강제 삭제합니다. 

 

 

- 브랜치명 변경하기 [-m]

new-branch라는 브랜치 생성 후 baby-branch로 변경 

git branch new-branch
git branch -m new-branch baby-branch

 

 

 

🟥 원격 브랜치 다루기

원격지의 새 브랜치 받아오기

git fetch
git switch -t origin/new-branch

로컬에 원격지의 'new-branch' 브랜치를 생성하여, 연결하고 switch 합니다. 

 

 

원격지 브랜치 연결해제

원격지 origin에 로컬 main을 다시 push하는 방법입니다. 

git remote remove origin
git push -u -f origin main

 

 

원격지 브랜치 소스 올리기

로컬과 원격지가 동일 브랜치명으로 연결되어야 push가 가능합니다.

git branch new-branch  // new-branch 라는 브랜치 생성
git switch new-branch  
git push -u origin new-branch

 

원격지 브랜치 삭제

git push origin --delete 원격지브렌치명

* origin은 원격지의 이름입니다. 

git - 설치 방법은 아래 링크 참고 

👉https://gosasac.tistory.com/69

 

git - 설치(CLI와 GUI[sourcetree])와 최초 설정 방법

🟥 윈도우 Git 설치 https://git-scm.com/ 에서 Git을 다운로드 합니다. ⭐설치과정에서 Git Bash 를 포함하는 것이 좋습니다. 그 이유는 Git Bash가 Git사용에 적합한 터미널 이기 때문입니다. 또, Git Bash는

gosasac.tistory.com

 

 

 

 

🟥 프로젝트의 default 브랜치명 변경 방법

 

1. default 브랜치명 확인

git config init.defaultBranch

 

2. default 브랜치명 변경 (main으로 변경)

git config init.defaultBranch main

 

 

3. 현재 브랜치의 브랜치 명 변경 (master → main으로 변경)

git branch -m master main

예전에는 master, salve를 많이 사용했으나, 역사적 관점에서 불편한 용어이기 때문에 master → main 으로 대체되었다.

 

 

 

🟥 프로젝트 생성 & git관리 시작

적당한 위치에 원하는 이름으로 폴더를 생성하고 VS Code 를 오픈합니다.

해당 폴더에서 터미널 열고 (윈도우 단축키 Ctrl + ` )

git init

폴더에 숨김모드로 .git 폴더가 생성된 것을 확인할 수 있습니다. 

(*.git 폴더를 지우면 git에서 관리해온 정보가 다 날아갑니다. )

git status

현재 폴더의 상황을 git관점에서 보여줍니다.

 

 

 

🟥 git 관리에서 특정 파일/폴더 제외 (.gitignore)

 보안상 민감한 파일이나 자동으로 생성 또는 다운로드 되는 파일들(빌드 결과물, 라이브러리)은 .gitignore 파일을 사용해 형상 관리에서 제외시킬 수 있습니다. 

 

.gitignore 파일 예시

# 이렇게 #를 사용해서 주석

# 모든 file.c
file.c

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

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

# .c 확장자지만 무시하지 않을 파일
!not_ignore_this.c

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

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

# logs 폴더 바로 안의 debug.log와 .c 파일들
logs/debug.log
logs/*.c

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

더 상세한 .gitignore 형식은 

👉https://git-scm.com/docs/gitignore 참고

 

 

 

🟥 커밋 (commit)

* Git의 3가지 공간

출처: 얄코 Git 강의

1. Working directory

 - Untracked: Add된 적 없는 파일이나 ignore 된 파일

 - Tracked : Add된 적 있고 변경내역이 있는 파일

 - git add 명령어로 Staging area로 이동합니다. 

 

2. Staging area

 - 커밋을 위한 준비 단계입니다. 

 

3. Repository

 - 최종 커밋된 상태로 원격저장소를 의미합니다. 

 


- 먼저 git status 명령을 통해 변경 파일을 확인합니다.

git status

 

- 파일 하나 stage에 담기

git add 파일명

 

- 모든 파일 stage에 담기

git add .

 

- 커밋으로 로컬 저장소로 올리기 

git commit

git commit 까지만 입력하면 vi 편집기 입력모드로 진입합니다.

커밋 메시지를 입력한뒤 저장하고 종료를 해서 vi 편집기를 빠져나옵니다.

vi편집기 단축키

i : 입력시작

ESC : 입력종료

q : 저장없이 종료 

q! : 저장없이 강제종료

wq : 저장하고 종료

 

 

- vi 편집기를 통하지 않고 커밋 메시지와 함께 커밋

git commit -m "메시지"

 

아래 명령어로확인 

git log

 

- add와 commit을 한 번에

git commit -am "메시지"

위 방법은 새로 추가된(untracked) 파일이 없을 때만 사용합니다.

 

 

 

🟥 git push

 git 프로젝트 원격지(깃헙)로 올리는 방법

add와 commit까지 완료가 된 상태에서 아래 명령어를 입력해 원격지 저장소(깃헙)에 소스를 올릴 수 있습니다.

git remote add origin 깃헙주소
git push -u -f origin main

git remote add origin 깃헙주소

로컬 git 저장소에 원격 저장소로의 연결을 추가하는 명령줄입니다.

 

git branch -m main

기본 브랜치명 이름을 main으로 변경하세요. (github 권장 내용입니다.)

 

git push -u origin main

로컬 저장소의 커밋 내역을 원격으로 업로드합니다. 

현재 브랜치를 default로 어떤 원격지 어떤 브랜치에 연결할지 지정하는 것으로 , 

위 명령줄 입력 이후로는 git push 만 입력하면 main에서의 push는 원격지의 main 브랜치로 올라갑니다.

 

git remote

현재 프로젝트와 연결된 원격지 목록을 볼 수 있습니다. 

 

❗ 원격지 브랜치명과 로컬 브랜치명이 다른경우

깃헙에 올릴 때는 로컬과 원격지에 동일 브렌치명 연결 설정이 필요합니다.

git branch from-local
git switch from-local
git push -u origin from-local

 

❗ 연결된 remote origin 연결 해제 

git remote add origin 잘못된주소

위와 같이 원격지 연결을 잘못 한경우 연결을 해제하는 방법입니다. 

 

원격지 origin에 로컬 main을 push하는 방법.

git remote remove origin
git push -u -f origin main

 

🟥 윈도우 Git 설치

 

https://git-scm.com/ 에서 Git을 다운로드 합니다.

 

⭐설치과정에서 Git Bash 를 포함하는 것이 좋습니다.

그 이유는 Git Bash가 Git사용에 적합한 터미널 이기 때문입니다. 

 

또,  Git Bash는 리눅스/맥(유닉스)에서 사용되는 CLI명령어들을 윈도우에서 사용 가능하게 해줍니다.

❗ 윈도우용 터미널은 명령어 체계가 리눅스와 다르기 때문입니다.

나머지 기본 설정은 그대로 설치 진행하면 됩니다.

 

 

 

 

🟥 SourceTree설치 (Git용 GUI)

https://www.sourcetreeapp.com  - Git을 GUI로 다룰 수 있도록 해주는 툴 입니다.

 

기타다른 툴 [ GitHub Desktop(비추 : 기능이 많이없음), GitKraken (유료) ] 도 있습니다.

SourceTree 설치 과정중에 Bitbucket을 등록하라고 나오는데, Bitbucket은 GitHub과 같은 종류의 서비스로 건너뛰기 하면 됩니다. (Mercurial도 마찬가지)

 

✅ CLI vs. GUI  ?? 

CLI는 Command Line Interface - 명령줄 입력 방식의 인터페이스 입니다.

GUI는 Graphic User Interface - 좀 더 쓰기 편하게 그래픽으로 제공되는 서비스 입니다.

 

⭐ 결론적으로 둘 다 사용할 줄 아는것이 좋습니다.

IDE상에서 간단히 처리할 땐 CLI사용하고, 전체적인 흐름을 보고 싶을 때 GUI가 편합니다.

 

 

 

 

🟥 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 core.autocrlf true

 


기본 브랜치 명을 main으로 변경

git config --global init.defaultBranch main

 

이후로 git.init을 통해 로컬에서 생성하는 리포지토리의 default branch는 main으로 생성됩니다.

 

👀 원래 master & salve 용어를 사용했는데, 서양의 역사 관점에서 비추어볼때 표현이 불편해 matser에서 →  main/trunk 로 변경되는 분위기입니다.

+ Recent posts