본문 바로가기

git & github

git 기초 - 기본 개념 및 작업 순서, commit, branch

728x90
반응형

1) git

    1-1) 설치 및 기본 설정

    1-2) 작업 순서도

    1-3) 명령어

    1-4) branch

2) git 실습

 

 

 

 

 

1) git

1-1) 설치 및 기본 설정

git : 소스 현상 관리 툴(상호 간의 코드 버전을 관리하는 툴)
소스 현상 관리 툴에는 SVN, git(대표적인 소스 현상 관리 툴)이 있다!
개발자의 경우, git은 선택이 아니라 필수로 잘 다뤄야 하는 툴이다!

프로젝트 단위(폴더)별로 여러 버전을 나누어 관리할 수 있게 해주는 툴이 'git'이다!!

 

git 설치

$ git --version -> git이 깔려 있는지 버전을 확인하는 코드
# (result) git version 2.36.1


git 업데이트
Windows에서 update하는 방법

$ sudo apt update
$ sudo add-apt-repository ppa:git-core/ppa -y
$ sudo apt update
$ sudo apt install git -y


MacOS에서 update하는 방법
1. path 경로를 바꿔주는 방법

$ echo "export PATH=/opt/homebrew/bin:$PATH" >> ~/.zshrc
$ source ~/.zshrc

$ which git
# (result) /opt/local/bin/git

$ brew update
$ brew install git

 

참고 : homebrew는 설치하면 기본적으로 "/opt/homebrew/Cellar"로 경로가 설정됨!!

 

2. git을 지우고 다시 까는 방법

$ cd /opt/local/bin
$ sudo rm -rf git
# (result) error가 뜸!!

# SIP 기능(MacOS가 기본적으로 보유한 기능)
$ csrutil status
# (result) System itegrity Protection status : enabled.

$ echo $path => 여기서 "path" 값에 설정한 경로를 먼저 읽을 수 있게 설정하는 코드
$ git
# (result) /opt/homebrew/bin /opt/local/bin => "/opt/homebrew/bin" 경로에서 먼저 git을 찾은 후 "/opt/local/bin" 경로에서 git을 찾는다는 뜻!!


(위의 방법과 다른 update 방법)

$ cd /etc
$ sudo vi paths
# => (vi 명령어를 통해 입력화면으로 들어가면 거기서 homebrew 내용을 맨 위로 올려줌!)

$ source ~/.zshrc

$ git --version
# (result) git version 2.38.1 => 최신버전으로 update된 것을 확인할 수 있음!!

 

 

기본설정

$ git --version

# git 사용 시 누구인지 알아보게 하기 위해 설정하는 것(user.name, user.email)이다!
$ git config --global user.name 'sangbeom'
$ git config --global user.email 'hhsb2441@gmail.com'

$ git config --global user.name
$ git config --global user.email

# Mac에서 enter key에 대해 호환을 시켜주는 코드
$ git config --global core.auticrlf input
$ git config --global core.auticrlf => 위의 설정 코드 결과 확인용 코드
# (result) input



workspace 정의
- directory 생성

Linux or MacOS

$ cd /mnt/c/Users/[pc-007]/Documents/[lecture_git] => Windows 사용자의 경우
$ cd Documents/lecture_git => MacOS 사용자의 경우
$ code . => 터미널에서 바로 VSCode를 여는 코드


"code ." 명령어가 안 먹히는 경우 조치 방법
ctrl + shift + p(Windows 사용자의 경우)
command + shift + p(MacOS 사용자의 경우)
=> Shell Command: install 'code' command in PATH(해당 내용을 검색하여 권한을 풀어주면 정상 동작함!)

cd /mnt/c/Users/[user 이름]/AppData/Local/Programs/Microsoft VS Code/bin
cd /mnt/c/Users/[유저 이름]
cd /AppData

 


git 사용 전 에시 파일들
development.json

{
	"username": "root",
	"password": "root",
	"database": "board_dev",
	"host": "127.0.0.1",
	"dialect": "mysql"
}


test.json

{
	"username": "root",
	"password": "root",
	"database": "board_test",
	"host": "127.0.0.1",
	"dialect": "mysql"
}


production.json

{
	"username": "root",
	"password": "root"
	"database": "board",
	"host": "127.0.0.1",
	"dialect": "mysql"
}


JSON(Javascript Object Notation) : 자바스크립트 객체 리터럴 방식이 텍스트를 주고받을 때 매우 용이하기 때문에 데이터를 통신할 때 내용을 넘겨주는 형식으로서 자바스크립트 객체를 사용하는 개념

 

git 설명

$ git init => 해당 directory 안에 ".git"이라는 폴더를 생성해줌!!
$ ls -al => ".git" 폴더가 있는 것 확인 가능!
$ ls => 기본적으로 ".git" 폴더는 숨김 파일이기 때문에 확인 불가능!


.git : 우리의 버전별로 저장하는 히스토리들이 모두다 여기에 저장될 것이기에 함부로 건들면 안 됨!!(매우 중요한 폴더임!)

$ git status => ".git" 폴더가 현재 어떤 상태인지를 알려주는 명령어
# (result)
현재 브랜치 master

아직 커밋이 없습니다

추적하지 않는 파일:
(커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
.DS_Store
development.json
production.json
test.json

커밋할 사항을 추가하지 않았지만 추적하지 않는 파일이 있습니다 (추적하려면 "git
add"를 사용하십시오)


.gitignore
기본적으로 git 폴더가 파일의 변화를 추적할 것인데 특정 파일은 추적하고 싶지 않을 때,
".gitignore"에 해당 파일이름을 기재하면 해당 파일을 더 이상 git에서 추적하지 않음!!(git status 결과 조회에 해당 파일이 안 뜸!!)

즉, ".git" 폴더 안에서 ".gitignore" 파일을 생성해주고
그 파일 안에 관리하고 싶지 않은(추적하고 싶지 않은) 파일명을 작성하면 됨!!

- "*.js"를 .gitignore 안에 기재하면 모든 js 파일들을 관리하지 않겠다(추적하지 않겠다)는 의미(git status 결과 조회에 안 보이게 함)!
- "package-lock.json"을 .gitignore 안에 기재하면 package-lock.json을 관리하지 않겠다(추적하지 않겠다)는 의미(git status 결과 조회에 안 보이게 함)!
- "node_modules/"를 .gitignore 안에 기재하면 node_modules 폴더와 그 안에 있는 모든 파일을 관리하지 않겠다(추적하지 않겠다)는 의미(git status 결과 조회에 안 보이게 함)!

$ mkdir node_modules
$ cd node_modules
$ vi 1.js => 파일 생성 후 저장
$ vi 2.js => 파일 생성 후 저장

$ cd ..

$ git status

 

 

 

1-2) 작업 순서도

Working directory에서 Repository로 보내려면 반드시 Staging area를 거쳐야 한다!!

1. Working directory(작업 폴더)
- 작업 폴더(Working directory)는 .git에 의해 관리되고 있는 상태
- 본인의 작업 폴더 안에서는 하나의 파일당 2가지의 상태로 표현함(Tracked와 Untracked로 구분하여 관리되고 있음)

 

  • Tracked(추적) : 한 번이라도 repository, 즉 .git에 의해 관리된 적이 있는 파일
  • Untracked(추적되지 않음) : 한 번이라도 repository, 즉 .git에 의해 관리된 적이 없는 파일


대기소, 즉 Staging area로 이동하는 방법

$ git add [파일명] => 작업 폴더 내의 파일 중 해당 파일만 Staging area로 넘기겠다는 뜻
$ git add . => 작업 폴더 내의 모든 파일들을 Staging area로 넘기겠다는 뜻

 


2. Staging area(대기소) => 파일을 선택하여 Repository에 저장하기 위해 필요하다고 보면 됨!!

(문법) : git add [파일명] | [명령어]

$ git add development.json
$ git status
(result)
현재 브랜치 master

아직 커밋이 없습니다

커밋할 변경 사항:
(스테이지 해제하려면 "git rm --cached <파일>..."을 사용하십시오)
새 파일: development.json

추적하지 않는 파일:
(커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
.gitignore
test.json


Staging area는 .git에 저장하기 전에 중간다리 역할을 한다고 보면 됨!
정말 단순히 대기소 역할만 하기 때문에 큰 의미를 두지 않음!

"git add"를 진행한 파일은 Visual Studio Code에서도 무언가 변화가 생김!

git add 내용 취소하기

$ git rm --cached [파일명]
$ git rm --cached development.json
(result)
현재 브랜치 master

아직 커밋이 없습니다

추적하지 않는 파일:
(커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
.gitignore
development.json
test.json

커밋할 사항을 추가하지 않았지만 추적하지 않는 파일이 있습니다 (추적하려면 "git
add"를 사용하십시오)

 

$ git restore --staged [파일명]
$ git restore --staged development.json

 


한 번에 git add 하기

$ git add .
$ git status
(result)
현재 브랜치 master

아직 커밋이 없습니다

커밋할 변경 사항:
(스테이지 해제하려면 "git rm --cached <파일>..."을 사용하십시오)
새 파일: .DS_Store
새 파일: .gitignore
새 파일: development.json
새 파일: test.json

 


3. Repository(.git)
그럼 이제 기록하는 일만 남은 상태!
(중요!!) commit: .git 폴더(Repository)에 기록하는 행위

 

# 최초의 commit
$ git commit
$ git commit -m "commit message 입력 가능"

$ git log => 본인이 commit한 내용들(commit 해시값, commit author, commit date)을 보여줌! -> 해당 화면에서 나가려면 "q" 누르면 됨!


git log 화면보다 UI적인 화면으로 보는 것이 효과적이기 때문에 VSCode의 확장 프로그램에서 "Git Graph"를 설치하여 본인이 commit한 내용들이나 branch를 확인하는 것이 좋다!!

 

 

 

1-3) 명령어

commit을 여러 번 만들기
test.json

{
	"username": "root",
	"password": "root",
	"database": "git_test", => "board_test"를 "git_test"로 수정함!
	"host": "127.0.0.1",
	"dialect": "mysql"
}

 

$ git add .
$ git commit -m "fix: test.json database 내용 수정"


feat : 새로운 기능 추가
fix : 버그 수정
docs : 문서 수정
style : 코드 스타일 변경
design : UI 변경
test : test 코드 작성, 리팩토링
refactor : 리팩토링
rename : 파일명 수정
remove : 파일 삭제

현재 Repository(저장소)에 commit(git graph에서 동그라미로 표현됨)이 2개가 들어가 있는 상태!!

$ git checkout [본인의 commit 해시값]

 

=> checkout 명령어(현재 열고 있는 파일, 혹은 HEAD의 위치를 변경할 때 쓰는 명령어)가 최근에 switch로 구분 변경됨!(따라서 앞으로는 switch를 사용하는 것이 좋음!!)

 

$ git switch -d [본인의 commit 해시값] => MacOS에서는 이렇게 브랜치를 이동하면 됨!



HEAD

$ git switch master


5개 이상의 commit(git graph에서 동그라미로 표현됨)을 만들어보기
모든 파일 내용에서
보안상 root 계정은 쓰지 않는 것이 좋기 때문에 계정을 바꿀 것임!    →    root => sangbeom
test.json 파일의 database 속성 부분에 오타가 있어 이를 수정할 것임!
test.json 파일에서 password 부분의 값을 빈칸으로 만들 것임!
그리고 마지막으로 setting.json을 추가할 것임!

setting.json

{
	"port":3000,
	"message":"App listening on the port 3000"
}

 

그리고 setting.xml 파일도 추가할 것임!

setting.xml

<root>
	<port>3000</port>
	<message>App listening on the port 3000</message>
</root>


마지막으로 test.json 파일을 삭제할 것임!

 


할 일 분류
username 바꾸기 => root -> sangbeom
database 속성 오타
test.json password 값 수정
setting.json 추가
setting.xml 추가
test.json 삭제

 

이전 commit으로 돌아가는 방법

$ git checkout [해시값]
$ git switch -d [해시값]


이전으로 가는 명령어

  • reset : commit을 그냥 날려서, 즉 지워서 이전 브랜치로 돌아가도록 하는 명령어
  • revert : 돌아가고 싶은 이전 commit을 복사해서 기존 master 위에 올려주는 명령어


reset
(문법)
$ git reset --옵션 [commit 해시값]

reset의 옵션
1. hard

수정사항을 완전히 삭제!

$ git reset --hard [commit 해시값]

 

 

hard 복구하는 방법(좋은 방법이 아님!! => 나중에 작업한 새로운 파일과 잘 합쳐지지 않기 때문!!)

$ git reflog
# => 본인이 했던 commit 히스토리를 보고, 복구할 히스토리에 해당하는 commit 해시값을 구한 다음
$ git reset --hard [commit 해시값]


2. soft

repository에서 staging area로 이동.

$ git reset --soft [commit 해시값]


3. mixed(default 옵션이라 옵션을 따로 안 써도 됨!)
repository에서 그냥 working directory로 이동.

$ git reset [commit 해시값]

 


revert
revert의 핵심은 commit 히스토리를 삭제하는 것이 아니라, 새로 만들어
되돌리는 방법(기존의 commit을 복사해서 HEAD 위치에 넣어준다고 보면 됨!!)이라는 점이다!
reset보다는 안전하지만 처음 배울 때는 어려움!

(문법)

$ git revert [되돌릴 해시값]


revert를 진행할 경우, 이전 commit과 비교해 똑같은 파일에서 바뀐 부분이
있다면 컴퓨터가 무엇이 우선순위인지를 알 수 없기 때문에
사람이 직접 코드를 작성해야 함!!

(case1) revert를 취소하고 싶다면

$ git revert --abort


(case2) 직접 코드를 정리해 완료했다면

$ git revert --continue

 


test.json 파일 다시 살리기

$ git revert [되돌릴 해시값]

$ git reset --hard 4ea0be009bd46d49d2ae68eea36b943e13a72cfe => revert로 새로 생성한 commit만 삭제하는 코드

 

 

 

1-4) branch

git branch 생성
브랜치(branch)는 나뭇가지를 뜻함

우리가 했던 commit은 한 줄 짜리 리스트이다!
이 한 줄 짜리를 여러 줄로 만드는 것이 바로 "branch"이다!

branch 만드는 문법

$ git branch [branch 이름]


master : 현재 메인으로 쓰고 있는 branch를 뜻함!
"develop"이라는 branch 만드는 코드

$ git branch develop

$ git branch => 확인용 코드


"develop"이라는 branch로 이동하는 코드

$ git switch [branch 이름]
$ git switch develop
$ git branch


"feature", "hotfix"라는 branch를 새로 만드는 코드

$ git switch -c feature
$ git switch -c hotfix


"hotfix"라는 branch를 삭제하는 코드

$ git branch -d hotfix => 단, 해당 삭제 코드를 실행하기 전에 우선 브랜치를 다른 곳으로 이동시킨 후 지워야 에러가 안 남!!

$ git branch test
$ git branch


branch 이름 바꾸기
여기서 "m"은 move의 약자

$ git branch -m [기존 branch 이름] [바꿀 branch 이름]
$ git branch -m test hotfix

$ git branch -m master main
$ git switch develop

 

 

 

 

2) git 실습