https://wecandev.tistory.com/152
[ 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 커밋아이디
'Study > 공부공부' 카테고리의 다른 글
웹 애플리케이션의 렌더링 방식 (0) | 2024.11.16 |
---|---|
[네트워크] 원격 접속 방식들 (0) | 2024.10.25 |
[용어정리] AWS / 클라우드 컴퓨팅 (0) | 2024.01.15 |
[용어정리] RESTful API 에 대해서 (0) | 2024.01.10 |
[기초CS] CPU (0) | 2024.01.03 |