소스코드 개발이력을 관리해주는 git 입니다.

gitExtesion

<aside> 💡

커밋메시지 기본원칙

~커밋타입~ [~적용 범위~] : 간단설명

본문

꼬리말

</aside>

<aside> 💡

커밋타입

FEAT : 새로운 기능추가

FIX : 코드베이스에서 버그를 패치

BREAKING CHANGE : API에 대한 호환성을 깨는 변경사항

DOCS : 문서 업데이트

STYLE : 코드 스타일 변경

REFACT : 코드 리팩토링 (최적화)

ENHANCE : 성능 개선

TEST : 테스트 추가 COMMENT : 주석 추가 또는 변경

</aside>

?

@sourcetree------------

Create : git init기능

Add : .git이 생성되어있는 경우 연동

Clone : github등에서 동기화-다운받을때

@git LFS(LargeFileStorage)------------??? 잘안됨 ㅜㅜ

1.다운로드후 설치, 이하 터미널작업

2. git lfs 설치 git lfs install

3. 기존git 추적관리해제 git rm -r --cached "E:\\_Develop\\repos\\파일이름경로"

.vs/PracticalShader_OFW/v17/Browse.VC.db

.vs/PracticalShader_OFW/v17/ipch/AutoPCH/3357846a4d410d79/MAIN.ipch

4. 이제git lfs가 추적관리 git lfs track "E:\\_Develop\\repos\\파일이름경로"

ㄴ전부추가 git lfs track *

ㄴ50MB이상만 git lfs track "*.[size>50m]"

5. git에 gitattributes추가 git add .gitattributes

@git---------------------

<git 명령어 모음>

git --help

git commit --help

git stash --help //스테이시, 1브랜치 작업중 아직커밋하면 안되는데 2브랜치로 넘어가서 커밋하고 푸시해야하는 경우 1브랜치 작업을 임시 저장해줌

git --version

git config --global core.autocrlf input //협업시 윈도우 맥 엔터방식 차이 방지

git config --global user.name "~~~"

git config --global user.email "~~~"

git config --global init.defaultBranch main

cd ~~~주소~~~

git init

git status

<.gitignore 프로젝트폴더에 파일만들고 제외할 파일주소추가>

#를 사용해서 주석

file.c # 모든 file.c

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

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

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

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

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

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

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

logs/*.c

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

git add .

git commit -m "~~~"

<vm 모드 조작키>

:q 저장없이종료

:q! 저장없이강제종료

:wq 저장하고종료

hjkl 방향키

esc명령모드 v선택 d잘라내기 p붙여넣기 y복사하기

i편집모드 --끼워넣기orINSERT-- 표시상태

git log

git remote add origin ~~~원격리포주소~~~

git branch -M main

git push -u origin main

/**/git pull origin main --allow-unrelated-histories

/**/git clone ~~원격리포주소~~

1. 디렉토리 이동

1) 홈 디렉토리로 이동  $ cd ~

2) 새 디렉토리에 디렉토리명을 생성 $ mkdir [디렉토리명]

3) [디렉토리명]로 이동 $ cd [디렉토리명]

4) 부모 디렉토리로 이동 $ cd ..

5) 현재 경로를 출력 // print working directory $ pwd

6) 디렉토리의 내용을 출력 $ ls

7) 디렉토리의 폴더 상세 정보까지 출력 $ ls -l

8) 디렉토리의 숨김 파일과 디렉토리까지 출력 $ ls -a

tip: 옵션은 합쳐서 ls -al 처럼 사용이 가능하다.

9) 파일이 있는 디렉토리를 내용물과 함께 삭제 $ rm -r [디렉토리명]

10) vi 편집기로 [파일명.확장자명] 파일을 작성 $ vim [파일명.확장자명]

11) 터미널 창의 내용을 삭제 $ clear

12) 터미널 창을 종료 $ exit

2. git 유저 / 업로드 설정 ★필수★

1) 현재 위치에서 지역 저장소를 생성 $ git init

2) 깃 환경에서 사용자 이름을 [사용자명]으로 지정 $ git config --global user.name "[사용자명]"

3) 깃 환경에서 사용자 이메일을 [사용자이메일명]으로 지정 $ git config --global user.email "[사용자이메일명]"

4) 깃의 상태를 확인 $ git status

3. commit 명령어

1) [파일명.확장자명]을 스테이지에 올림 $ git add [파일명.확장자명]

2) 커밋 메시지 [메시지명]을 붙여 커밋 $ git commit -m "[메시지명]"

3) 메시지 [메시지명]을 붙여서 스테이징과 커밋을 동시에 진행$ git commit -a -m "[메시지명]"

4) 커밋 내역 확인 $ git log

$ git log --pretty=oneline   # 한줄로 표기하기

$ git log -p  //상세내용확인

$ git log --stat

특정 커밋 내역 확인 $ git show [커밋 id]

5) 최근 버전과 작업 폴더의 수정 파일 사이의 차이를 출력 $ git diff

$ git diff [이전커밋 id] [이후커밋 id]

$ git log -p [이전커밋 id] [이후커밋 id] //이후에만 있는 것, -p 추가시 차이나는 소스코드 확인가능

6) 지정한 커밋 해시로 이동 $ git checkout [커밋 해시]

7) 가장 최근 커밋을 취소 $ git reset HEAD^ # 현재 HEAD의 이전 커밋으로 되돌리기

$ git reset HEAD~n # 현재로 부터 n 번째 이전 커밋으로 되돌리기

8) 지정한 커밋 해시로 이동하고 커밋을 취소 $ git reset [커밋 해시]

reset의 3가지 옵션

$ git reset --soft [커밋ID]  # head 만 바뀜

$ git reset --mixed [커밋ID] # staging 도 그 때로 바뀜

$ git reset --hard [커밋ID] # working디렉토리/staging 모두 그 때로 바꿈 

git reset --soft HEAD~1   // 최근 커밋을 취소하고 변경 사항을 스테이징 영역으로 유지
git reset --mixed HEAD~1  // 최근 커밋을 취소하고 변경 사항을 워킹 디렉토리로 되돌림 (기본 옵션)
git reset --hard HEAD~1   // 최근 커밋을 취소하고 변경 사항을 모두 삭제
9) 특정 커밋 해시의 변경 이력을 취소 $ git revert [커밋 해시] //수정대상두고, 지정한 해시의 커밋만 취소 (기존브랜치에 선형적으로 커밋)

10) 커밋 수정하는 법

파일 수정 한 뒤

$ git add .

$ git commit --amend  : 최신 커밋 수정

4. 브랜치 명령어

1) 새로운 브랜치 [브랜치명]을 생성 $ git branch [브랜치명]

브랜치 조회하기 $ git branch

$ git branch -a //로컬+원격에 있는 모든 브랜치 보기, 타인이 올린 리모트 브랜치의 경우 선 패치 후 확인

2) [브랜치명]으로 체크아웃(이동) $ git checkout [브랜치명]

$ git checkout -b [브랜치명]  # 브랜치만들고 바로 이동

브랜치 삭제 $ git branch -d 브랜치명

3) 커밋 로그에서 한 줄에 한 커밋씩 출력 $ git log --oneline

브랜치 전체 조회 $ git log --all --decorate --oneline --graph

4) 수정한 전체 파일을 스페이지에 올린다. $ git add .

5) 커밋 로그에 각 브랜치의 커밋을 그래프로 표시 $ git log --branches --graph

6) [브랜치명]을 master 브랜치와 병합 // $ git merge [브랜치명]

$ git merge [브랜치명] --edit // 병합 후 바로 vi 편집기가 나오면서 커밋 메시지 수정 가능

$ git merge [브랜치명] --no-edit // 커밋 메시지 수정없이 바로 병합

$ git pull --no-rebase

rebase 잘라내기후 붙여넣기 rebase후 붙여넣은 끝에 merge해줘야, 반면 merge는 기존 것 두고 새로 만들어 병합

7) merge 취소하기 $ git merge --abort

$ git rebase --abort

$ git add . >>>>> git rebase --continue

5. git hub 원격 저장소

1) 원격 저장소에 연결 $ git remote add origin [github 레포지 주소]

$ git remote add origin [branch 이름]   #없으면 생성됨

2) 원격 저장소에 연결됐는지 확인 $ git remote -v

3) 지역 저장소의 커밋을 맨 처음 원격 저장소에 올리는 경우 $ git push -u origin master

4) 3번을 한 후에 지역 저장소의 커밋을 원격 저장소에 올리는 경우(업로드)

$ git push

$ git push origin master

$ git push --force //합의된 상황에서 리모트 무시하고 로컬로 푸시

5) 원격 저장소의 커밋을 지역 저장소로 가져옴 $ git pull

$ git pull origin master

$ git switch -t origin/~~원격브랜치~~ //현재 스위치 브랜치로 저장 설정

6) SSH 키를 생성함 $ ssh-keygen

7) 원격 저장소 복제하기,첫번째 커밋이 아니라면 풀 먼저하기 $ git remote remove origin

원격 저장소를 [지역저장소명]에 복제하기 $ git clone [원격 저장소 주소]

8) 원격 저장소의 커밋을 가져오기만 하고 merge하지 않는다

가져온 branch 내용은 origin/[브랜치] 로 저장됨  $ git fetch

이후엔 diff 로 비교 $ git diff test origin/test # 브랜치 이름이 test일 경우 예시

9) 패치로 가져온 정보가 있는 브랜치\\[FETCH\\_HEAD\\]로 이동 ```git

$ git checkout FETCH_HEAD

10) 패치로 가져온 정보가 있는 브랜치[FETCH_HEAD]를 master 브랜치에 병합한다

$ git merge FETCH_HEAD

11) [브랜치명]을 만드는 것과 동시에 체크아웃한다 $ git checkout -b [브랜치명]

12) 원격 저장소에 [브랜치명]의 브랜치의 커밋을 올린다 $ git push origin [브랜치명]

13) 원격저장소 삭제 $ git remote remove origin

14) 원격브랜치 삭제 $ git origin --delete [브랜치명]

6. 파일/보관 명령어(stash)

1) 파일 내용 출력 $ cat [파일명.확장자명]

2) 디렉토리를 만드는 동시에 지역저장소 생성 $ cd init [디렉토리명]

3) 현재 커밋을 다른 브랜치에 있는 [커밋메시지] 커밋으로 되돌림

$ git reset [커밋메시지] [커밋해시]

4) 병합이 끝난 [브랜치명]을 삭제 $ git branch [브랜치명] -d

5) 작업 트리의 수정 내용 stash에 따로 보관하기 $ git stash

$ git stash save

6) 보관한 내용을 목록을 출력 $ git stash list

7) 보관한 내용을 적용 $ git stash apply

$ git stash apply stash@{1}

8) 보관한 내용 중 가장 최근 항목을 삭제 $ git stash drop

$ git stash drop stash@{1}

9) stash를 apply하고 제거(drop) 하기 $ git stash pop

7. 기타 명령어

1) 긴 명령어 짧게 이름 붙여 사용하기 ex) git log --pretty=oneline을 ->git history 라는 별명으로 바꾸기.

git config alias.[별명] '원하는 명령어'

git config alias.history 'log --pretty=oneline'

2) tag 설정 하기 (커밋해쉬아이디의 휴먼버전)

$ git tag [태그이름(버전?)][커밋 ID(브랜치이름?)]

$ git tag -a 1.1.0 -m "bug fix" //annotated주석 -m 태그에 대한 설명

$ git tag Version_2 86a99 # tag 달기

$ git tag    #tag 조회하기

$ git show Version_2

$ git push --tag //업로드는 따로해야함

3) 소스코드 압축 $ git archive --format=zip [추출브랜치명] -o [파일이름.zip]

$ git rm

$ git show

$ git bisect

$ git grep

$ git mv

//SSH생성

ssh keygen -t rsa

//개인서버 만들기

git init --bare [디렉토리이름]

git [디렉토리이름] add [저장소이름]ssh://[사용자이름]@13.124.42.13/home/git/git/[디렉토리이름]/