상세 컨텐츠

본문 제목

GIT & GitHub

TIL

by my dev diary 2023. 5. 24.

본문

 

* CLI 명령어는 기본적으로 숙지하고 있어야 한다. 명령어를 보려면 아래의 더보기 클릭!

더보기

CLI

: 명령어 기반 인터페이스

깃 : CLI 도구

 

* 소스트리는 안정성이 낮아 추천하지 않으므로 명령어 외우기!

 

CLI 명령어

 

윈도우 : git bash

macOS : terminal

 

명령어 = 마우스의 클릭, 더블클릭

암기 X, 숙달 O!

 

* 경로

  1. 절대경로 : 전체(최초 ~ 현재까지) 경로
  2. 상대경로 : 현재 경로를 기준으로 나타낸 경로.(현재경로는 . 상위경로는 ..으로 지칭)
[ CLI 명령어 ]

pwd

현재 경로(현재 디렉토리) 확인하기

clear
화면을 깨끗하게 비우기

ls
현재 경로의 파일 및 폴더를 조회

ls -a
현재 경로의 숨김파일 및 폴더(파일/폴더 이름 앞에 .이 있음)까지 모두 조회

ls -al
현재 경로의 숨김파일 및 폴더(파일/폴더 이름 앞에 .이 있음)까지 모두 목록으로 자세하게 조회

cd 경로
경로로 이동

cd ..
상위 디렉터리로 이동

cd .
현재 디렉터리로 이동(아무 일 X)

cd ~
홈 디렉터리(처음 터미널 실행 시 기본 세팅되어 있는 경로)로 이동

touch 파일명
파일명 이름으로 빈 파일 생성하기

cat 파일명
파일명의 내용 확인하기

rm 파일명
파일명 파일을 삭제

mkdir 디렉터리명
디렉터리명 디렉터리를 생성

rmdir 디렉터리명
비어있는 디렉터리명 디렉터리를 삭제하기

rm -rf 디렉터리명
비어 있지 않은 디렉터리 이름 삭제하기(강제 옵션)

 

vi 편집기

편집기 : 파일 안의 내용을 읽고 쓸 수 있게, 수정과 조작이 가능하게 하는 프로그램.

[ vi 편집기 명령어 ]

vi 파일명
파일명 파일을 편집하기(vi 편집기 창이 열림)

a 혹은 i
현재 커서에서 텍스트를 삽입하기 위해 ‘입력모드’로 진입(➔ 창 하단에 INSERT 뜸)

esc
입력모드에서 나와 ‘일반모드’로 돌아감.(➔ 창 하단에 INSERT 사라짐)

:w
저장하기(➔ 하단에 written 뜸)

:q
창닫기(vi 편집기 종료)

:wq
파일을 저장하고 창닫기

 

 

GIT

: 변경사항 일목요연하게 관리하며 협업할  있게 .

= 버전(commit, 변경사항) 관리를 위한 도구.

: 여러 사람의 코드를 쉽게 바꾸고, 합치며 개발할 수 있게 한다.

 

Version

: 유의미한 변화(기능 추가, 버그 삭제, 수정 등)가 결과물로 나온 것.

 

프로그램 개발

= 유의미한 변화를 쌓아 프로그램을 만드는 .

 

GitHub

: 원격 저장소 호스팅 서비스 = 인터넷상에서 깃으로 관리한 프로젝트를 관리해 주는 서비스.

: 개발자들의 SNS

 

[ 초기 설정 ]

git config —global user.name “이름”
➔ 이름은 영어로 작성!(이 컴퓨터에서 만들어지는 버전의 저자가 누구인지 명시)

git config —global user.name 이메일
➔ 이메일은 깃허브에 가입된 메일(이 컴퓨터에서 만들어지는 버전의 저자의 메일 명시)

git config -l
현재 설정된 이름, 이메일 확인

 

깃이 관리하는 세 개의 공간

: 스테이지, 저장소는 깃이 관리하는 가상의 공간임.(눈으로 볼 수 없음)

: 작업 디렉토리는 눈으로 볼 수 있음.

작업 순서 : 작업 디렉토리 > 스테이지 > 저장소

 

작업 디렉터리(working tree)

: 버전 관리의 대상이 위치하는 공간.

: 변경사항(changes)이 있음.

: .git이 있는 디렉토리.

 

스테이지(index)

: 다음 버전이 될 후보가 올라가는 공간

: 작업디렉터리의 변경사항 중 유의미한 변경사항만 올리기.(add)

 

저장소(repository)

: 버전이 만들어지고 관리되는 공간. 버전들이 쌓임.

: 버전으로 만들어 스테이지에서 저장소로 추가(commit)

  1. 로컬 저장소(local repository) : 내 컴퓨터에서만 존재하는 저장소.
  2. 원격 저장소(remote repository) : 인터넷상에서 존재하는 저장소.

 

버전 1개가 만들어지는 과정

작업 디렉터리 내에서 변경 사항 생성 > 스테이지로 add > 저장소로 commit

 

 

 

터미널 명령어

[ 기본 ]

mkdir @@
@@ 폴더 생성

cd @@
@@ 폴더로 이동

pwd
폴더위치 확인

git init
로컬 저장소 만들기(초기화)(.git 폴더 생김.)

touch @.txt
@ 텍스트 파일(버전관리의 대상) 만들기(파일 만들고 안에 hi 같은 간단한 내용 입력하기)

cat @.txt
내용 확인(hi 출력됨)

git status
작업 디렉토리의 상태 확인.
On branch master
No commits yet
Untracked files(tracked files : 버전이 된 적이 있거나 스테이지에 추가된 적이 있는 파일)
등이 출력됨.

git add 스테이지에 추가할 대상
스테이지에 추가할 대상을 스테이지에 올리기

git add .
현재 경로에 있는 모든 변경사항을 스테이지에 올리기
(changes to be committed 출력됨.)

git rm —cached 파일명
파일명 파일을 스테이지에서 내리기

git commit
: 자세한 커밋 메시지와 함께 커밋하기(커뮤니케이션을 위해 이걸 주로 사용해야 함!)
: a > 첫 번째 줄은 제목(노란 글자) > 한 칸 띄우고 세 번째 줄부터는 본문(흰 글자) > esc > :wq

git commit —message “커밋메시지”
git commit -m “커밋메시지”
간단한 커밋메시지로(제목만 생성) 커밋하기

* 커밋 메시지
: 제목 (+ 본문)
: 버전에 대한 설명을 담은 쪽지.

git commit —amend
커밋메시지 수정



[ 작업 내역 조회하기 ]

git log
내가 만든 버전(커밋) 조회

git log --oneline
내가 만든 버전 간단하게 한 줄로 확인(짧은 커밋해시와 제목만 나옴)

git log —patch
git log -p
커밋별 변경사항 목록 조회

git log —branches
모든 브랜치의 커밋 목록 조회

git log —graph
커밋 목록 그래프로 조회



[ 작업 내역 비교하기 ]

git diff
저장소의 최근 커밋과 현재 작업디렉터리를 비교하기
최근에 커밋 후 어떤 작업을 했는지 보여줌.

git diff —staged
저장소의 최근 커밋과 스테이지 비교하기

git diff 커밋해시1 커밋해시2
커밋끼리 비교하기(순서유의!)
(커밋1에 비해 이 커밋2는 뭐가 다른가?)



[ 브랜치 관리하기 ]

git branch
브랜치의 이름을 조회
➔ * master : 현재 master 브랜치에서 작업 중이다.

git branch @@
@@ 브랜치를 만들기

git branch -d @@
@@ 브랜치 삭제
(단, 체크아웃 되어있지 않은 브랜치만 삭제 가능)

git checkout @@
@@로 작업환경을 바꾸어주기

git checkout -b @@
@@ 브랜치를 만들면서 체크아웃하기

git merge @@
체크아웃된 브랜치에서 @@ 브랜치를 병합하기



[ 작업 되돌리기 ]

git revert 취소할 커밋
‘취소할 커밋’이 취소된 새 커밋 만들기.
ex ) 커밋이 1-2-3-4 있을 때 git revert 3 입력 시 ➔ 1-2-3-4-5(=2)

git reset 되돌아갈 커밋
git reset —mixed 되돌아갈 커밋
‘되돌아갈 커밋’으로 mixed reset 하기

git reset —soft 되돌아갈 커밋
‘되돌아갈 커밋’으로 soft reset 하기

git reset —hard 되돌아갈 커밋
‘되돌아갈 커밋’으로 hard reset 하기

 

 

브랜치

버전을 여러 개의 흐름으로 관리하는 방법. 즉, 버전의 분기

 

브랜치로 관리하는 방법

  1. 브랜치를 나눈다.
  2. 각지의 브랜치에서 작업한다.
  3. (필요시) 나눈 브랜치를 합친다.

 

브랜치로 문제 해결하기

충돌 : 같은 부분을 다르게 수정한 부분

 

브랜치의 이름

master(main) branch

최초의 브랜치. 커밋을 만들면 기본적으로 master(main) branch에 속하게 된다.

 

 

HEAD

포인터.

일반적으로 현재 작업 중인 브랜치의 최신 커밋을 가리킴.

즉, 내가 지금 어디서 작업 중인가를 가리킨다.

ex) master branch에서 checkout 할 때 : head는 master의 최신 커밋을 가리킴.

 

 

checkout

특정 브랜치에서 작업할 수 있도록 작업 환경을 바꿈.

head의 위치도 (해당 브랜치의 최신 커밋으로) 같이 옮겨짐.

 

 

 

[ 브랜치 병합(merge) ]

 

브랜치를 합치는 것.

 

1. 새로운 커밋을 만들지 않는 병합. 빨리 감기 병합

     새로운 브랜치에만 커밋이 쌓이고 마스터 브랜치는 가만히 있을 때, 마스터 브랜치에는 추가된 커밋이 업데이트되기만 함.

 

2. 새로운 커밋을 만드는 병합

     새 브랜치에도 커밋이 쌓이고 마스터 브랜치에도 커밋이 쌓일 때 서로에게 없는 커밋이 각각 있음.

     두 브랜치를 병합한 새로운 커밋이 생성된다. > 커밋메시지를 작성하는 창으로 이동됨.

       (메시지는 자동으로 작성되므로 :wq로 저장하고 닫아주면 됨)

 

 

 

[ 충돌 해결하기(conflict) ]

 

* 충돌 시 파일이 제멋대로 변경됨. 대처법은 단 두 단계!

1. 충돌을 해결한다.(어떤 브랜치의 내용을 반영할지 직접 선별)
2. 다시 add 하고 커밋한다.

 

master branch 혹은 foo branch의 내용 중 원하는 내용만 남기고 나머지는 지운다.

 

 

 

 

 

[ 작업 되돌리기 ]

 

revert

버전을 되돌린 새로운 버전 만들기

(지금까지 만든 버전은 유지됨/비교적 안전함)

커밋메시지를 적는 창이 생김.

 

reset

버전을 완전히 되돌리기

유의미한 로그를 남기면서 리셋할 수 있음.

 

1) soft reset

작업내역하고 스테이지로 daa는 유지, 저장소로 커밋한 것만 리셋됨(git diff —staged로 확인)

커밋만 되돌리기

 

2) mixed(default) reset

작업한 변경사항(작업내역)은 유지 스테이지로 추가한 것도 리셋(git diff로 확인)

스테이지도 되돌리기

 

3) hard reset

작업한 것까지 모두 리셋

작업디렉토리까지 모두 되돌리기

 

 

 

[ SSH ]

 

ssh가 https보다 안정성 높음.

 

두 개의 키(암호) 생성 : 공개키, 개인키

 

ssh-keygen : 키 만드는 명령어

 

id_rsa.pub : 아래 코드에서 공개키 정장된 위치

 

 

 

 

[ GitHub ]

 

URL : https://github.com/계정명/저장소이름

 

백업협업을 위해 사용.

 

 

<clone>

= 원격 저장소 복제하기

 

원격 저장소 브랜치 이름

main branch  = master branch

origin = 원격 저장소에 붙은 일종의 별명

origin/HEAD = 원격 저장소 origin의 HEAD

origin/main  = 원격 저장소 origin의 main

 

 

<push>

 

 

 

 

<Pull Request>

 

1. 기여하려는 저장소를 본인 계정으로 포크 하기

fork : 원격 저장소를 내 계정으로 복제. 원본 저장소와 싱크를 맞추려면 깃허브에서 sync fork > Udate branch 누르면 최신의 저장소 상태로 업데이트됨.

 

2. 포크 한 본인 계정의 저장소를 클론 하기

 

3. 브랜치 생성 후 생성한 브랜치에서 작업하기

 

4. 작업한 브랜치푸시하기

 

5. 풀 리퀘스트 보내기

 

 

 

 

관련글 더보기

댓글 영역