2023/07/25 TIL

김도현·2023년 7월 25일
0

TIL

목록 보기
6/76

금일 한 것

제대로 파는 Git & GitHub 강좌

금일 배운 것

1.Git

(1).Git이란

git은 프로젝트의 시간과 차원을 자유롭게 넘나들수 있도록 해준다.
시간 - 프로젝트의 버전을 과거로 되돌리거나 특정 내역을 취소할수있다.
차원 - 프로젝트의 여러 모드를 쉽게 전환하고 관리할 수 있다.

git config --global core.autocrlf true 

협업시 윈도우와 맥에서 엔터 방식 차이로 인한 오류 방지
프로그램 터미널을 Git Bash로 설정해야 협업하기 편하다.

설치 프로그램
Git
SourceTree - Git을 GUI로 다룰 수 있도록 해주는 툴
(GitKraken - 유료이지만 좀더 편리한 프로그램)

(2).Git설정

Git 전역으로 사용자 이름과 이메일 주소를 설정

  • GitHub 계정과는 별개
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

(3).프로젝트 생성 & Git 관리 시작

git으로 해당 프로젝트 관리

① CUI를 이용해서 관리(Git Bash)

git init

② GUI를 이용해서 관리(Git Bash)

폴더에 숨김모드로 .git 폴더 생성 확인

  • 🛑 이 폴더를 지우면 Git 관리내역이 삭제됩니다. (현 파일들은 유지)

파일 상태 확인하기

git status

만약 Git으로 관리되어 있지 않은 상태이면
fatal: not a git repository (or any of the parent directories): .git 를 표시

(4).Git에게 맡기지 않을 것들

① Git의 관리에서 특정 파일/폴더를 배제해야 할 경우

a. 포함할 필요가 없을 때

  • 자동으로 생성 또는 다운로드되는 파일들 (빌드 결과물, 라이브러리)
    b. 포함하지 말아야 할 때
  • 보안상 민감한 정보를 담은 파일
    이럴때 .gitignore 파일을 사용해서 배제할 요소들을 지정할 수 있습니다.

② .gitignore 사용해보기

.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

(5).변화를 타임캡슐에 담아 묻기

① 프로젝트의 변경사항들을 타임캡슐(버전)에 담기

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입력한 것이 있을 때 사용
위로 스크롤kGit log 등에서 내역이 길 때 사용
아래로 스크롤jGit 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 "(메시지)"
  • 🛑 새로 추가된(untracked) 파일이 없을 때 한정

(6).과거로 돌아가기

① reset 사용해서 과거로 돌아가기

git log

로 되돌아갈 시점의 커밋 해시 복사(일련번호)

git reset --hard (돌아갈 커밋 해시)

② reset 하기 전 시점으로 복원해보기

git reset --hard
  • 💡 뒤에 커밋 해시가 없으면 마지막 커밋을 가리킴

③ revert 로 과거의 커밋 되돌리기

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 (되돌릴  커밋 해시)
  • 원하는 다른 작업을 추가한 다음 함께 커밋
  • 취소하려면 git reset --hard

(7).과거로 돌아가기[SourceTree]

① 커밋하기


1번. 커밋에 추가할 것들을 스테이지로 올린다.
2번. 커밋을 누른다.

커밋할 이름을 넣어준다

② revert


-해당 커밋에 마우스 우클릭 - 커밋 되돌리기

③ reset


  • 해당 커밋에 마우스 우클릭 - ... 이 커밋으로 초기화
  • 선택지에서 Hard 선택

④ revert시 충돌 해결

  1. replace lions with leopards 커밋을 되돌리기합니다.
  2. 충돌이 일어남을 알려주는 경고창이 뜹니다.
  3. 스테이지되지 않은 leopards.yaml을 우클릭하고 충돌 해결에서 저장소 것을 선택합니다.
  4. 메시지를 입력하고 커밋을 하면 완료됩니다.

(8).여러 Branch 만들어보기


Branch: 분기된 가지 (다른 차원)

  • 프로젝트를 하나 이상의 모습으로 관리해야 할 때
    • 예) 실배포용, 테스트서버용, 새로운 시도용
  • 여러 작업들이 각각 독립되어 진행될 때
    • 예) 신기능 1, 신기능 2, 코드개선, 긴급수정...
    • 각각의 차원에서 작업한 뒤 확정된 것을 메인 차원에 통합

이 모든 것을 하나의 프로젝트 폴더에서 진행할 수 있도록!

① 브랜치 생성 / 이동 / 삭제하기

브랜치 생성

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)

1개의 댓글

comment-user-thumbnail
2023년 7월 25일

좋은 글 감사합니다. 자주 올게요 :)

답글 달기