본문 바로가기

Study/공부공부

[ git ] 코딩애플 강의 정리1

https://wecandev.tistory.com/152

 

[Git] 자주 쓰는 Git 명령어 정리

1. 시작하며 자주 쓰는 git 명령어를 git commands cheat sheet 를 참고하여 정리해보자. 자세한 내용은 언제나 그렇듯이 내 블로그보다는 공식 사이트를 확인하는 것이 좋다. git으로 새로운 프로젝트를

wecandev.tistory.com

 


[ git 설치 ]

git 설치 후 cmd에서 버전확인 

git --version

작업용 폴더 하나 생성해준다. 

터미널을 열어서 이메일&이름 등록을 해줬는데 필수과정은 아닌듯 하다. 

git을 처음 사용한다면 해준다. 누가 지금 git을 쓰고있는지 구분하기 위한 과정이란다.

일단 해줬다.

PS C:\Users\gogus\Desktop\git_마스터> git config --global user.email"haehyun228@gmail.com"
PS C:\Users\gogus\Desktop\git_마스터> git config --global user.name"phyho"

 


이제 vs code에서 활용해보자.

vs code 실행하고 위에서 만들 폴더를 연다.

Terminal 열어서 ( 단축키 : ctrl + shift + `(백틱) ) 아래처럼 입력

> git init

이제 git이라는 소프트웨어가 이 폴더에서의 작업( 파일 및 코드)들을 모두 추적하게 된다.


[ git 스테이징 & 커밋 ]

이 git 마스터 폴더 내부에 app.txt라는 파일을 새로 생성한 후에 내용을 입력해본다.

이걸 git에 저장해보자.

Terminal 에 아래처럼 입력

이제 이 app.txt 파일은 git에 영구적으로 보관이 된다.

 

코드를 추가로 작성했다면 저장후에 같은과정 반복해주면 된다.

이런방식으로 계속 기록하면 된다. 버전생성이라고도 한다.

 

파일 더 만들고 커밋하는 연습을 계속 해본다.

git add 파일명

git commit -m '남길메모'

 

굳이 두번씩 입력하는 이유는 모든 파일을 전부 기록할 필요가 없기 때문 (ex) img파일)

따라서 내가 기록할 파일만 선택한 후에 그 파일을 기록하도록 명령(commit)하는거다.

작업폴더에서 파일을 골라 git add (요 과정을 staging한다고 표현하기도 한다.)

=> 해당 파일을 git commit

git add &  git commit 동시에 처리해주는 명령어도 있다. 나중에 알려준단다...

 

일단 명령어들을 조금더 살펴보자.

git add 파일1 파일2 ...

원하는 여러개의 파일들 스테이징

> git add .

작업폴더의 모든파일 스테이징

> git status

내가 어떤 파일들을 스테이징 했는지, 수정했는지 확인가능.

> git log --all --oneline

 

* 스테이징한 파일을 취소하고 싶다면

git restore --staged 파일명

 

 

** commit은 간단한 기능을 하나 추가할때마다 해주기 **


사실 터미널에서 말고 여기에서 진행할 수 있다.

파일을 수정하고 저장하는순간 아래처럼 수정된 파일인 app.txt가 뜨는데

+ 표시로 스테이징, 메세지란에 입력후 체크표시로 커밋할 수 있다.

 

> git diff

 

> git difftool

> Y

hjkl 키로 이동

종료는 :q 또는 :qa

 

하지만 띄어쓰기 하나정도의 변동사항도 알려주기 때문에 diff만 사용하지는 않는다.

 

 

> git difftool 커밋아이디

> git difftool 커밋아이디1 커밋아이디2

Y를 입력하면 아래처럼 비교해준다.

위처럼 Vim 에디터를 사용하기 싫다면 차례대로 입

> git config --global diff.tool vscode
> git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'

 

 

 

아래의 git graph를 설치하면 (내가 설치한 기억은 없는데 설치되어 있단다...ㅎ)

 

아래처럼 git log 명령어를 입력할 필요 없이 확인할 수 있다.

클릭해보면

파일 우클릭하면 git diff 도 확인가능


[ git branch 생성]

코드를 짜다가 원본프로젝트에서의 오류를 방지하기 위해 

프로젝트 사본에서 테스트 해보고 실행된다면 원본에 옮기는 경우가 있다.

branch 로 활용해보자.

 

> git branch 브랜치명

> git switch 브랜치명

> git status 로 확인해보면 현재 branch를 알려준다.

 

이제 coupon 파일을 만들고 (여기는 coupon branch)

스테이징 및 커밋을 해준다.

아래와 같은 구성이 되는거다.

 

다시 master branch로 돌아와봤더니

> git switch master   (master 대신 main으로 쓰기도 함)

coupon 파일은 사라져있다. coupon branch에서 만들었기 때문!! 

각각의 branch (coupon & master)에서 스테이징&커밋해보기 연습~ 

> git log --oneline --all --graph  

그래프 형식으로 확인가능 ( HEAD 는 현재 내 위치 )


이제 이 branch들을 하나로 합쳐보자 => merge

일단 main branch로 이동 후

> git merge coupon

 

coupon branch의 a파일을 수정하고

master branch의 b파일을 수정한 경우 merge가 성공적으로 진행.

coupon branch의 a파일의 1번줄을 수정하고

master branch의 a파일의 1번줄을 수정한 경우 merge했을 때 충돌(conflict).

 

각 브랜치에서 app.txt 파일의 첫번째 줄을 수정하고 커밋해줬다.

master branch로 넘어가서 merge 해봤더니 충돌이 난다.

원하는 코드만 남기고

다시 스테이징&커밋 해준다.

다시 git log를 출력해보면

 

브랜치 생성은 git branch 브랜치명

브랜치 이동은 git switch 브랜치명 

브랜치 합치기는 main/master 브랜치로 이동한 뒤에 git merge 브랜치명

브랜치마다 commit 내역을 그래프로 보고싶으면 git log --graph --oneline --all

브랜치 합칠 때 conflict가 발생하면 파일열어서 수정하고 git add, git commit 하기 


[ 3-way merge ] _ 기본방식 (main브랜치 + 신규브랜치)

 

[ fast-forward merge ] _ 그냥 신규브랜치를 main브랜치로

기준이 되는 브랜치에 신규 commit이 없으면 자동으로 이게 적용된다.

이게 싫다면 git merge --no-ff 브랜치명

 

[ 브랜치 삭제 ] 

merge 완료해도 branch들을 남아있는데 삭제하고 싶다면

git branch -d 브랜치명

 

merge 안한 branch 삭제는 

git branch -D 브랜치명


[ rebase ]

merge가 아닌 rebase로 브랜치 합칠 수 있음.

                     브랜치의 시작점을 다른 commit으로 옮겨주는 행위

3-way merge는 git log를 출력했을 때 복잡.

간단하고 짧은 브랜치들은 rebase를 사용하면 깔끔. (기존 commit을 이어붙이기 때문에 conflict 위험)

 

[ 일반 merge ] 

중심브랜치로 이동 => git merge 새로운브랜치명

 

[ rebase & merge ]

새로운브랜치로 이동 => git rebase 중심브랜치명 => 중심브랜치로 이동 => git merge 새로운브랜치명

 


[ squash and merge ]

git merge --squash 새브랜치

기존것들이 하나로 합쳐져서 merge 되어 main 브랜치의 로그를 출력했을 때 자잘한 브랜치들 없이 깔끔.

 


[ 파일복구 ]

 

GIT_마스터2 폴더 생성하고 git init

 

 a 파일생성 & 커밋 => b 파일생성 & 커밋 => c 파일생성 & 커밋

 

git log --oneline 

 

이때 c 파일을 수정했다가 원상태로 복구하고 싶다면

git restore 파일명  

=> 바로 이전 commit 했을 때의 c파일로 돌아간다.

 

 

특정시점의 파일로 복구하고 싶다면 

git restore --source 커밋아이디 파일명

=> 해당 시점의 commit 파일로 돌아간다.

 

[ commit 취소 ]

 

git revert 커밋아이디

 

git revert 9aef67c 해봤더니 아래처럼 뜬다.

( i_커밋메시지 수정 //  :wq _저장후 종료 )

 b 파일이 사라졌다.

 

commit 여러개 취소

git revert 커밋아이디1 커밋아이디2

 

최근 commit 취소

git revert HEAD

 

과거로 돌아가기

git reset --hard 커밋아이디

 

리셋인데 변동사항 지우지말고 스테이징해놓기

git reset --soft 커밋아이디

 

리셋인데 변동사항 지우지말고 unstage해놓기

git reset --mixed 커밋아이디