개발 노트

Linux // 3일차 [Git] 본문

Linux

Linux // 3일차 [Git]

Meter216 2022. 11. 23. 19:51

목차

1. git2. Git 설치3. Git 기본구조4. Git brnach


1. GIT

 

개발자는 개발을 혼자 하지 않는다. 코드를 공유하려면 그것도 쉽지 않다.
코드를 관리해주는 도구(소스 현상관리 툴)
SVN, Git, Github

** Git이랑 Github 는 다르다.

 

Git 한 번 할 때 제대로 아는 것이 좋다. (터지면 팀원들꺼까지 다 터지기 때문에 위험하다.)
Git 폴더(프로젝트 단위)에서 여러 가지 버전을 넣는 행위 버전들을 쌓아 놓으면 나중에 수정을 할 때 편해진다. 

 

2. Git 설치
git —version // 버전이 나오면 깃 설치 된거

window

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

mac

echo "export PATH=/opt/homebrew/bin:SPATH" >> ~/.zshrc
source ~/.zshrc
which git

brew update
brew install git

homebrew
<!-- cd /usr/bin
sudo rm -rf git 
csruil status -->

echo #path 
git
/opt/homebrew/bin  /usr/bin

git을 homebrew꺼를 먼저 실행되게 바꾸는것 

source ~/.zshrc

 

git기본설정

 

git config --global user.name   이름 적어놓는거
git config --global user.email   email 적어두는거

 

이름 email 빼고 그대로 입력하면 입력한 값 확인 가능

 

window

git config --global core.autocrlf true

mac

git config --global core.autocrlf input

git config --global core.autocrlf 확인
code . 안되는 경우 해결방법
vs code에서

command(ctrl)+shift+p

shell Command: install'code'command in PATH

cd /mnt/c/Users/[유저명]/AppData/Local/porgrams/"Microsoft VS Code"/bin

wsl설치 //

code .은 이제 VS Code를 wsl에서 실행하는 것과 같다.

 

JSON(JavaScript Object Notation) 자바 스크립트 객체이다. 파일 주고 받을 때 편하다


 

git init

 

# .git 폴더라는 것을 생성 .git은 숨김폴더로 생긴다. 이걸 실행해야 깃이 실행되는것이다. 이거 안되면 위에 안깔린거다.
모든 히스토리들이 저장되서 .git이걸 지우면 모든 저장파일이 삭제된다.

 

git status **(초반엔 많이써서 확인하자)


깃의 상태를 알려주는 것

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   development.json

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        index.html
        test.json

위와 같이 뜬다

 

.gitignore

 

.git 폴더가 code가 저장이 될 때마다 감시해서  >> .git에 저장한다.

이걸 방지하기 위해서 .gitignore 에다가 추적하지 않았으면 하는 파일명을 작성하게 되면 .git이 추적하지 않는다.

폴더도 된다 명령어 폴더명/

하면 모든 js파일 *.js


3. git 기본 구조.

 

working directory(작업폴더)

 

tracked 추적이 되는 친구들 한번이라도 .git에 의해 관리된 적이 있는 파일
untracked 추적이 안되는 친구들 한번이라도 .git에 의해 관리된 적이 없는 파일

내가 기본적으로 작업을 하는 공간이고 .git에 의해 관리되고 있는 상태
대기소로 이동 방법

$ git add [파일명] 혹은 
git add . 이건 다 옮기는것

staging area (대기소)


이 staging area는 ,git 저장하기 전에 중간다리 역할
단순하게 대기소 역할만 하기 때문에 큰의미를 두진 않는다.
어떤 파일을 repository에 저장을 할 껀지 먼저 선택을 하는 의미.
add 해서 넘긴 파일은 visual studio code에서도 옆에 A로 바뀐다.

 

add 내용 취소하기

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


다시 working directory로 이동한다.

 

repository(.git)

기록하는 일만 남은상태

commit 컴퓨터에 저장하는 행위

$git commit
$git commit -m "커밋 메시지 입력가능"(웬만하면 이런식으로 처리 가능)
$git log = commit 된 것을 볼 수 있다. #나가기 q


window 기준으로 ctrl + x , y , enter 누르면 완료 된다. mac은 vi 화면으로 열리고 수정하고 wq1commit 1동그라미

master가 초록색으로 변하면 commit 내용과 working directory 의 내용이 똑같은 상태라는 것이다. 완벽한 상태.

commit이 완료되고 수정 된 사항이 없으면 초록색, 수정을 또 진행하면 노란색이 된다.

 

commit message에는 중요하게 작업 한 내용을 담아야한다.

 

commit 주요 메세지 저장내용


feat : 새로운 기능 추가
fix : 버그수정
docs : 문서수정
style : 코드 스타일 변경 코드 : ; , 등의 변경
design : UI 변경 css관련 변경내용
test : test 코드작성, 리팩토링 테스트에대한
refactor : 리팩토링
rename : 파일명 수정
remove : 파일 삭제

 

앞에 이같은 이름을 적고 뒤에 상세 내용을 써서 저장하는게 낫다. 최대 50~ 70글자까지 가능하다.

commit 메세지를 작성 할 수 있는 작업 리스트를 정해서 작업을 하는것이 좋다. (to do list 같이 하는것)
** 작업을 분리해서 하고 저장 습관을 들이기.


 

커밋 저장 후 처음의 내용으로 돌아가고 싶을 때

$git checkout [내커밋해쉬값] 잠깐 보기만 할 뿐이지 쓸 일이 없다.
$git switch [내커밋해쉬값]

 

head =  지금 수정하고 있는 곳

 

** rest, revert

 

둘 다 다른 방식으로 돌아간다.
reset 는 모조리 날리고 돌아가는것 되게 과격한 형태, commit을 그냥 날리는것이다.

 

문법

$git reset (--mixed 디폴트값 생략가능) [커밋해시값]

--hard


git reset --hard [커밋해시](완전히 다 복사하지 않아도 괜찮음 앞에 7자리정도만 해도됨)

수정사항을 완전히 삭제 (working directory에 있는 내용까지 다 날려버림.)
커밋 내용이 모두 삭제되고 working 수정했던 내용도 삭제되며 초록색 master로 바뀜 (working과 .git의 내용이 같다는 뜻)
맨 위에 있는거 딱 하나만 삭제할 때는 괜찮을 수도 있다.(git reset --hard HEAD~1 헤드 하나이전의 값)

내가 새로 작업한 애랑 원래 있던 애랑 합치는게 안된다. 
**혹시라도 다 밀어야 할 경우가 생기지 않는 이상 쓰지 않는게 좋다.

 

--soft


git reset --soft [커밋해시]
repository 에서 staging area로 이동. >> 잠깐 저장소에 간다.
working directory는 바뀌지 않고 git 그래프는 바뀐다.
기존에 있었던 commit 들은 add에 들어있는 상태가 됨.

 

--mixed


git reset [커밋해시]
기본값이다. 저장소에서 그냥 working directory로 이동하는것.

 

복구하는 방법

$git reflog  로그들이 나옴 > git 히스토리를 보고 해시값을 구한 다음에
$git reset --hard 해시값

revert


**많이 사용하게 될 것
커밋 히스토리를 삭제하는 것이 아니라 새로 만들어서 되돌리는 방법 reset보다는 안전하지만 처음 배우는 사람한테는 지옥이다.

revert를 진행할 경우에는 이전 커밋과 비교해서 똑같은 파일이 바뀐 부분이 있다면 컴퓨터가 뭐가 우선순위인지 모르기 때문에 사람이 직접 코드를 작성해야함

$git revert [되돌릴해시값]
$git revert --continue = 직접 코드를 정리해서 완료했다면 git revert --continue
$git revert --abort = 취소값

test.json 파일을 다시 살려줘!
== test를 삭제 하기 전 해시값을 test 삭제 후 해시값 위로 올린다. or test삭제 commit이 맨 위에 있다면 hard HEAD~!을 통해 지워버리면 됨


4. git branch

 

우리가 했던 커밋은 한줄짜리 커밋. 이 한줄짜리를 여러줄로 만드는 것이 바로 브랜치

최소 구현이 되어 있는 곳에서 추가적인 기능을 테스트 할 수 있는 가지를 만들어보는것

새로운 가지를 만드는것

$git branch [브랜치이름]
$git branch 쳐서 *이 달린곳이 선택되있는곳
$git switch 브랜치이름 하면 바뀐다.
$git switch -c 브랜치이름 하면 바로 브랜치 이름으로 바뀌면서 만든다
$git branch -d 브랜치이름 = 삭제
$git branch -m 기존브랜치 바꿀브랜치 이름바꾸기

브랜치 이름을 가진 나뭇가지를 하나 만드는것

이런식으로 가지가 뻗어나간다.

 

'Linux' 카테고리의 다른 글

Linux//github, branch합치기  (0) 2022.11.24
Linux // 2일차 [사용자]  (0) 2022.11.22
Linux // 1일차 기본개념  (0) 2022.11.21