git은 프로젝트의 시간과 차원을 자유롭게 넘나들수 있도록 해준다.
시간 - 프로젝트의 버전을 과거로 되돌리거나 특정 내역을 취소할수있다.
차원 - 프로젝트의 여러 모드를 쉽게 전환하고 관리할 수 있다.
git config --global core.autocrlf true
협업시 윈도우와 맥에서 엔터 방식 차이로 인한 오류 방지
프로그램 터미널을 Git Bash로 설정해야 협업하기 편하다.
설치 프로그램
Git
SourceTree - Git을 GUI로 다룰 수 있도록 해주는 툴
(GitKraken - 유료이지만 좀더 편리한 프로그램)
Git 전역으로 사용자 이름과 이메일 주소를 설정
git config --global user.name "본인 이름"
git config --global user.email "본인 이메일"
설정 후 확인 방법
git config --global user.name
git config --global user.email
기존 브랜치명 변경
git config --global init.defaultBranch main
git으로 해당 프로젝트 관리
git init
폴더에 숨김모드로 .git 폴더 생성 확인
파일 상태 확인하기
git status
만약 Git으로 관리되어 있지 않은 상태이면
fatal: not a git repository (or any of the parent directories): .git 를 표시
a. 포함할 필요가 없을 때
.gitignore이름의 파일을 생성하여 그 안에 무시할 파일이름을 적어주면 된다.
형식
https://git-scm.com/docs/gitignore 참조
# 이렇게 #를 사용해서 주석
# 모든 file.c
file.c
# 최상위 폴더의 file.c
/file.c
# 모든 .c 확장자 파일
*.c
# .c 확장자지만 무시하지 않을 파일
!not_ignore_this.c
# logs란 이름의 파일 또는 폴더와 그 내용들
logs
# logs란 이름의 폴더와 그 내용들
logs/
# logs 폴더 바로 안의 debug.log와 .c 파일들
logs/debug.log
logs/*.c
# logs 폴더 바로 안, 또는 그 안의 다른 폴더(들) 안의 debug.log
logs/**/debug.log
commits == 버전 == 타임캡슐
추적하지 않는(Untracked
) 파일: Git의 관리에 들어간 적 없는 파일
파일 하나 담기
git add tigers.yaml
모든 파일 담기
git add .
(add하고 한칸 띄우고 .)
git commit
Vim을 쉽게 익힐 수 있는 사이트들
🔗 Vim Adventures : 게임 형식으로 Vim 학습
🔗 OpenVim : 주요 기능들을 쉽게 가이드해주는 웹 튜토리얼
🔗 VimGenius : 퀴즈 형식으로 Vim을 연습할 수 있는 사이트
작업 | Vi 명령어 | 상세 |
---|---|---|
입력 시작 | i | 명렁어 입력 모드에서 텍스트 입력 모드로 전환 |
입력 종료 | ESC | 텍스트 입력 모드에서 명령어 입력 모드로 전환 |
저장 없이 종료 | :q | |
저장 없이 강제 종료 | :q! | |
저장하고 종료 | :wq | 입력한 것이 있을 때 사용 |
위로 스크롤 | k | Git log 등에서 내역이 길 때 사용 |
아래로 스크롤 | j | Git log 등에서 내역이 길 때 사용 |
-FIRST COMMIT
입력한 뒤 저장하고 종료
커밋할때 같이 하기
git commit -m "FIRST COMMIT"
아래 명령어와 소스트리로 확인
git log
commit e7415ce18ffb6d6629b1a3548255222561d6c6b2 (HEAD -> main)
Author: KimDoHyeon <hj2471755@naver.com>
Date: Tue Jul 25 16:38:45 2023 +0900
FIST COMMIT
commit 일련번호 출력
Author: 이름 <이메일> 출력
Date: 커밋할때 시간 출력
버전
변경사항
git status
로 확인$ git status
On branch main
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: lions.yaml
modified: tigers.yaml
Untracked files:
(use "git add <file>..." to include in what will be committed)
leopards.yaml
no changes added to commit (use "git add" and/or "git commit -a")
캡슐에 담기
git add .
git commit -m "Replace Lions with Leopards"
또는
git commit -am "(메시지)"
git log
로 되돌아갈 시점의 커밋 해시 복사(일련번호)
git reset --hard (돌아갈 커밋 해시)
git reset --hard
git revert (되돌릴 커밋 해시)
만약 revert로 되돌릴때 그 사이에 수정된 것들이로 인해 충돌이 일어날 수 있음
예시
hj247@DESKTOP-R1VCF2H MINGW64 /f/git_test (main)
$ git revert fc3018f77d008605aa84e3ca47c8fc9519981bc2
CONFLICT (modify/delete): leopards.yaml deleted in parent of fc3018f (Replace Lions With Leopards) and modified in HEAD. Version HEAD of leopards.yaml left in tree.
error: could not revert fc3018f... Replace Lions With Leopards
Revert "Replace Lions With Leopards"
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
hj247@DESKTOP-R1VCF2H MINGW64 /f/git_test (main|REVERTING)
$ git rm leopards.yaml
rm 'leopards.yaml'
hj247@DESKTOP-R1VCF2H MINGW64 /f/git_test (main|REVERTING)
$ git revert --continue
[main 0b46521] Revert "Replace Lions With Leopards"
3 files changed, 9 insertions(+), 9 deletions(-)
delete mode 100644 leopards.yaml
create mode 100644 lions.yaml
git rm leopards.yaml
로 Git에서 해당 파일 삭제git revert --continue
로 마무리:wq
로 커밋 메시지 저장💡 커밋해버리지 않고 revert하기
git revert --no-commit (되돌릴 커밋 해시)
1번. 커밋에 추가할 것들을 스테이지로 올린다.
2번. 커밋을 누른다.
커밋할 이름을 넣어준다
-해당 커밋에 마우스 우클릭 - 커밋 되돌리기
replace lions with leopards
커밋을 되돌리기합니다.
Branch: 분기된 가지 (다른 차원)
브랜치 생성
git branch 브랜치명
브랜치 목록 확인
git branch
$ git branch
add-coach
* main
맨 마지막의 *브랜드명 은 현재 위치를 표시함
브랜치 이동
git switch 브랜치명
checkout
명령어가 Git 2.23 버전부터 switch
, restore
, checkout
로 분리$ git switch add-coach
Switched to branch 'add-coach'
hj247@DESKTOP-R1VCF2H MINGW64 /f/git_test (add-coach
💡 브랜치 생성과 동시에 이동하기
git switch -c 브랜치명
git checkout -b (새 브랜치명)
🗑 브랜치 삭제하기
git branch -d (삭제할 브랜치명)
지워질 브랜치에만 있는 내용의 커밋이 있을 경우
즉 다른 브랜치로 가져오지 않은 내용이 있는 브랜치를 지울 때는
-d
대신 -D
(대문자)로 강제 삭제해야 합니다.
git branch -D (강제삭제할 브랜치명)
✏️ 브랜치 이름 바꾸기
git branch -m (기존 브랜치명) (새 브랜치명)
브랜치 이동시 작업한 내용이 바뀜
예시
add-coach
에 있던 coach들이 main
으로 넘어오면서 사라짐
$ git log
commit a4bb8ef70e2f23862e9a1f961ef17de309f82073 (HEAD -> new-teams)
Author: KimDoHyeon <hj2471755@naver.com>
Date: Tue Jul 25 20:44:41 2023 +0900
Add team Jaguars
commit e7002207c59a23a61dd539157a7f958d9b3f1ce6
Author: KimDoHyeon <hj2471755@naver.com>
Date: Tue Jul 25 20:43:48 2023 +0900
Add team Pumas
commit bfca7b7c9ee2db9c3f9dbcb6bd0cb61c8b6dcd47
Author: KimDoHyeon <hj2471755@naver.com>
Date: Tue Jul 25 17:25:59 2023 +0900
Replace Cheetas with Panthers
commit e8e7485245a544af4208a3847c01979ac4d99247
Author: KimDoHyeon <hj2471755@naver.com>
Date: Tue Jul 25 17:22:44 2023 +0900
Add team Cheetas
commit 6ac8f9d73aba50c08ab9232cee75a565f2f6bcb3
Author: KimDoHyeon <hj2471755@naver.com>
Date: Tue Jul 25 17:20:11 2023 +0900
Add George to Tigers
commit fc3018f77d008605aa84e3ca47c8fc9519981bc2
Author: KimDoHyeon <hj2471755@naver.com>
Date: Tue Jul 25 17:05:52 2023 +0900
Replace Lions With Leopards
commit e7415ce18ffb6d6629b1a3548255222561d6c6b2
Author: KimDoHyeon <hj2471755@naver.com>
Date: Tue Jul 25 16:38:45 2023 +0900
FIST COMMIT
(END)
git log
시 해당 브랜치의 로그만 표시
여러 브랜치의 내역 편리하게 보기
git log --all --decorate --oneline --graph
$ git log --all --decorate --oneline --graph
* a4bb8ef (new-teams) Add team Jaguars
* e700220 Add team Pumas
| * c71862f (add-coach) Add Coach Teddy to Panthers
| * d2841b2 Add Coach Oscar to Leopards
| * d2cfe83 Add Coach Grace to Tigers
|/
| * 9febb5d (HEAD -> main) Add Freddie to Panthers
| * c2dada7 Add Olivia to Leopards
|/
* bfca7b7 Replace Cheetas with Panthers
* e8e7485 Add team Cheetas
* 6ac8f9d Add George to Tigers
* fc3018f Replace Lions With Leopards
* e7415ce FIST COMMIT
(END)
좋은 글 감사합니다. 자주 올게요 :)