본문 바로가기
Git & GitHub

git & GitHub

by 뽀롱트옌드 2023. 8. 8.

🗄️git

git을 사용하면 파일이름을 그대로 유지하며 파일에서 무엇을 변경했는지 변경시점마다 버전으로 저장 가능하고 버전마다 작업했던 내용 확인하고 되돌아갈수있음

  • 버전관리: 문서를 수정할때마다 언제, 어떤 것을 수정했는지 편하고 구체적으로 기록(변경사항 추적)

  • 백업: 내 컴퓨터가 고장날때를 대비해 외장하드, 온라인서비스(백업공간)를 사용해 자료를 저장
    깃파일 원격저장소(온라인저장소) 서비스중 가장 많이 사용하는 것이 GitHub

  • 협업: 온라인저장소(GitHub같은)를 사용해 여러사람이 함께 업무시 누가 어떤 부분을 어떻게 수정했는지 기록에 남음

  • 커멘드 라인 인터페이스(CLI): 터미널에서 직접 명령을 입력해 git사용
    git, 리눅스 명령 둘다 알아야해 어렵지만 익숙해지면 훨씬 빠르게 git 사용가능(자동화, 서버환경에서 깃을 사용하는 등 다양한 활용 가능)

    • git 로컬 설치
    • 윈도우: git 명령은 리눅스 명령을 기반, 리눅스명령을 사용할수있는 git bash 사용
      (윈도우에서 git설치시 git bash 함께 설치됨)
    • 맥: 운영체제가 리눅스명령을 기본으로 사용하여 터미널사용


[ git 정보 설정 ]

** git은 버전을 저장할때마다 사용자 정보도 같이 저장함(로컬에 처음 한번만 설정) **

  • 버전생성(commit)을 위한 정보등록
    $ git config: git 구성config 설정 ,
    $ git config --global: 전역옵션--global 현재 로컬에 있는 모든 지역저장소의 구성 설정

    • 윈도우 $ git config --global core.autocrlf true,
      $ git config --global core.autocrlf input:
      다른환경에서 프로젝트를 볼수있기때문에 자동으로 시스템에 맞게 개행문자(newline) 설정

      • $ git config --global user.name '깃허브와 일치시키는게 좋음': 사용자 이름 등록
      • $ git config --global user.email '깃허브와 일치시키는게 좋음': 사용자 이메일 등록
      • $ git config --global init.defaultBranch 브랜치명: 초기화(init)시 생성되는 브랜치를 브랜치명으로 설정 (master -> main 으로 바뀌는 추세)
      • $ git config --global --list: git 구성 확인


[ ✨버전만들기 ]

- 구조

✔️ 작업트리: 내컴퓨터(local, 로컬)에서 작업(파일수정, 생성)하는 눈에 보이는 디렉토리

✔️ 스테이지(stage): 버전으로 만들고싶은 파일을 보내 대기
(작업트리에서 생성, 수정한 파일 5개중 3개만 버전으로 만들고싶으면
3개만 스테이지로 넘져주면됨)

✔️ 저장소(repository, 리포지토리):
스테이지에 대기하고 있던 파일들을 버전으로 만들어 저장




  • $ git init: git 저장소를 사용할수있게 디렉토리 초기화, 저장소 생성 | initialize(초기화하다)

    • 초기화하면 작업트리안에 .git 숨김 디렉토리가 생성되며 .git안에 눈에 보이지않는 숨은파일로 스테이지(.git/index)와 저장소(.git/HEAD) 존재

    • 저장소를 만들때 기본적으로 marster 브랜치가 만들어져 master브랜치에서 작업시작됨


- 버전만들기

1. 작업트리에서 파일 수정및 생성

  • $ git status: untracked (빨강) | 커밋 한적이없어 git이 파일을 생성하거나 수정했는지 추적하고있지 않음

2. $ git add 버전관리하고 싶은 파일을 스테이지에 넣음

  • $ git add index.html: index.html 파일만 스테이지에 업로드
  • $ git add .: 모든 파일 스테이지에 업로드

3. $ git commit -m '메세지' 버전을 생성해 스테이지에서 저장소로 보냄

  • $ git status: tracked(초록) | 커밋한 파일 수정여부 계속 추적중

💡 *로컬의 .git 저장소(지역저장소)에만 커밋(버전등록)됨 *

원격저장소인 GitHub에도 연결해 백업해야 협업도 가능하고 나중에 로컬컴퓨터에 문제가 생겨
도 원격저장소에서 다운받아 사용가능




[ 🌵branch ]

✔️ 깃으로 초기화,저장소를 만들면(init) master라는 큰줄기의 최초 브랜치가 만들어져 master에서 작업 시작됨

✔️ 보통 master의 내용을 배포하기 때문에 개발완료된 내용을 master브랜치에 유지 하며,
기능, 페이지를 추가개발할 경우 협업시엔 개발자, 배포시점, 개발페이지, 기능, 개발속도등이 모두 다르기 때문에 master에 각 내용에 맞게 가지를 연결해 새로운 branch를 생성해서 개발해야 배포중인 master 브랜치에 영향이 안감

✔️ 생성한 branch에 개발내용을 push하고 기능에 문제가 없다고 판단되면 배포시점에 맞춰 master에 합쳐(병합merge)해 배포

  • (HEAD -> master) HEAD는 현재 작업트리가 어떤 브랜치(분기점)기반으로 작업중인지 가리킴
  • 브랜치는 브랜치에 담긴 커밋중 가장 최신의 커밋을 가리킴

최상위 큰줄기인 master로 이동하면 다른 브랜치에서 생성한 폴더 파일(코드)안보임


  • $ git branch: 프로젝트에서 관리되고있는 모든 branch의 목록

  • $ git branch -a: 지역, 원격저장소에 있는 모든 브렌치

  • $ git branch 브랜치이름: 현재 커밋에서 브랜치 생성

  • $ git checkout 브랜치이름: 해당 브랜치로 이동 -> 해당 브랜치로 이동해 개발(폴더및 파일 생성후 코드작성)해야 master에 영향이 안감

    • $ git checkout -b 브랜치이름: 해당 브랜치 생성 이동 한번에 가능
  • $ git marge 브랜치이름: 현재있는 브랜치에 해당브랜치를 병합

    • $ git marge 브랜치이름 --no-edit: 병합할때 커밋메세지 편집기창을 열지않고 깃에서 지정하는 커밋메세지 그대로 사용하기 설정
    • $ git marge 브랜치이름 --edit: 병합할때 편집기창 나타나지 않게 설정한경우 편집기창 보이게
  • $ git branch -d 브랜치이름: 브랜치삭제(강제 브랜치 삭제 -D) -> master로 이동해 사용

  • $ git checkout -t origin/브랜치명: 지역저장소에 브랜치 다운

  • $ git baranch -m master main: master브랜치를 main브랜치로 이동(이름변경)



[ 👾GitHub ]

1. 지역저장소와 원격저장소(깃허브) 연결

  • 깃허브에 원격저장소(repository, 저장소) test생성 후 리포지토리 주소 복사
    https://github.com/깃허브아이디/test.git

  • $ git remote add origin https://github.com/깃허브아이디/test.git:
    지역저장소에 원격저장소remote_를 origin(https://github.com/깃허브아이디/test.git 을 가리킴)이란 단어로 줄여 추가_add(연결)

    • 일반적으로 origin 사용
    • $ git remote -v: 연결된 저장소 확인

      2. push 깃허브로 보내기

  • $ git push -u origin master:
    origin(원격저장소: https://github.com/깃허브아이디/test.git)에 master라는 메인 브런치를 생성해 연결후 지역저장소에 커밋한 버전 업로드push

    • -u: 옵션 지역저장소의 브랜치를 원격저장소 master 브랜치에 연결(처음 한번 사용)
    • 원격저장소 브랜치를 push 연결하고 그뒤 같은 브랜치 업로드시 $ git push만 입력

3. pull 깃허브에서 내려받기

  • $ git pull origin master:
    origin(원격저장소)의 내용을 지역저장소 master 브랜치로 다운로드

4. 원격저장소를 다른 지역저장소로 내려받기

  • $ git clone 원격저장소주소: 원격저장소 master 브랜치만 복제해서 내려받아짐

    • $ git clone 원격저장소주소 디렉토리명: 지역저장소에 디렉토리명으로 폴더 생성해 그안에 master 브렌치복제
  • $ git checkout -t origin/브랜치명: 지역저장소에 브랜치 다운



📍 git 명령

  • $ git init 디렉터리이름: 디랙터리생성과 초기화 한번에 처리

  • $ git status: 깃의 현재 상태

    • untracked 상태: 한번도 커밋(버전관리)을 하지 않아 깃이 파일 생성,수정내용을 추적하지 않음
    • tracked 상태: 깃이 수정여부를 계속 추적함(한번이라도 커밋을 한 파일)
    • tracked의 modified 상태(스테이지에서의 상태)
      • Changes not staged for commit: 수정 되었으나 스테이지에 올라가지 않음(빨강)
      • Changes to be committed: 스테이지에 올라간상태(초록)
    • unmodified 상태: 작업트리의 모든 파일이 최신 버전과 비교했을때 수정되지 않은 상태
      nothing to commit, working tree clean
  • $ git log: 버전의 기록(커밋) 확인

    • 옵션 (옵션 여러개를 한번에 적용할수 있음 $ git log --oneline --branch)
      • $ git log --stat: 변경된 파일까지 확인가능
      • $ git log --oneline: 한줄에 한커밋씩 보여줌 간략히 확인
      • $ git log --branches: 각 브랜치의 커밋을 보여줌
      • $ git log --oneline --branches --graph: 각 브랜치가 어느 커밋에서 분리되고 합펴지는지 관계를 선으로 보여줌
      • $ git log master..apple: master브랜치에는 없고 apple 브랜치에만 있는 커밋 보여줌
  • $ git commit -am '메세지' : 한번 커밋 했던 파일을 스테이지에 add, 저장소에 commit명령을 동시에 처리하게 해줌

  • $ git diff: 작업트리에서 수정한 파일이 최신버전과 뭐가 달라졌는지 보여줌

  • $ git commit --amend: 최근 커밋 메세지 수정

  • $ git checkout -- 파일명: 스테이지에 올라가기전 작업트리에서 수정한내용을 수정전으로 취소(복구불가)

  • $ git checkout --커밋해시: 해당커밋해시로 돌아감 그이후커밋 삭제

  • $ git reset

    • $ git reset HEAD 파일명: 스테이징된 파일을 스테이지 에서 내림 (파일명을 안적으면 스테이지에있는 모든 파일이 내려옴)
    • $ git reset HEAD^: 최신 커밋 취소
    • $ git reset HEAD~n 최근 n개의 커밋을 취소
    • $ git reset --hard HEAD^: 최근 커밋, 스테이징, 수정 하기전 상태로 작업트리 되돌림(복구불가)
    • $ git reset 복사한 커밋 해시: 해당 커밋로 돌아가고(작업트리도) 해당 커밋 이후에 생성된 커밋 삭제, 복사한 커밋 해시가 가장 최신 커밋
    • $ git reset --hard ORIG_HEAD: 최근 reset한개만 복구 가능
  • $ git revert 복사한 커밋 해시: 해당 커밋은 남아있고 내용(해당 버전에서 수정된작업트리)을 취소한 새커밋 생성 -> 보류, 명령실행시 메시지 입력할수있는 편집기 나타남

  • $ git stash: 한번이상 커밋한 파일들을 수정하다 감춤(다른 긴급 수정건있을때 주로 사용)

    • $ git stash list: 감춤 파일 리스트(먼저 감춤것을 아래 최근 감춘 것을 위 stash 스택)
    • $ git stash pop: 감춤파일 꺼내와 계속 수정 및 거밋
  • .gitignore: 파일명, 디렉토리/, .확장자 를 입력하면 버전 관리에서 제외됨

    • $ git rm -r --cached .: 이미 저장소에 올라간 파일을 나중에 제외시킬때 (나중에 .gitignore 생성)

📍 리눅스 명령

  • $ ~: 홈디렉터리(C/User/사용자아이디)

  • $ clear: 화면 정리

  • $ pwd: 현재 위치의 경로 | print working directory

  • $ 리눅스명령 -옵션: 옵션추가, 옵션은 순서상관없이 붙여쓰기 가능

  • $ ls: 현재 디렉터리안의 디렉터리와 폴더의 목록 | list

    • ls명령 옵션
      • $ ls -l: 디렉터리의 상세정보까지 표시
      • $ ls -a: 숨김파일까지 표시
      • $ ls -r: 정렬 순서 거꾸로 표기
      • $ ls -t: 작성 시간 순으로(내림차순) 표시
  • $ cd: 디렉토리 이동(./ 현재 작업중인 디렉터리, ../ 상위 디렉터리) | change directory

    • $ cd ..: 상위폴더로
    • $ cd 폴더이름: 폴더이름의 하위디렉토리로 이동 (이름의 일정문자만 치고 tab하면 자동완성)
    • $ cd ~: 홈 디렉터리로 이동
  • $ code .: 현재 경로의 폴더, 파일들을 코드 편집기에서 열어줌

    • $ code . -r: VS code 터미널에서 사용시 -r 옵션으로 현재창에서 열기
  • $ mkdir 폴더이름: 하위 디렉터리 생성 | make directory

  • $ rm 폴더이름: 해당 디렉토리 삭제 | remove

    • $rm -r 폴더이름: 해당이름의 디렉토리 안의 디렉토리와 파일까지 삭제
  • $ vim test.txt: vim 편집기 문서 실행 ex모드로 실행됨 (저장하면 메모장 파일로 저장됨)
    ESC: ex 모드 -> 저장(추가), 종료 모드 이동가능

    • i(Insert)or a(Add): 입력(삽입)모드
    • :w, :write: 저장, :q, :quit: 종료
    • :wq: 저장종료 (뒤에 파일 이름을 적으면 그이름으로 저장됨)
    • :q!: 문서를 저장하지 않고 편집기 종료(확장자 .swp인 임시파일 생성)
  • $ cat 텍스트문서: 터미널에서 텍스트 문서 확인 | concatenate(연쇄하다)

    • $ cat 파일1, 파일2, 파일3...> 새파일: 파일을 차례로연결한 내용으로 새파일 생성
    • $ cat 파일1 >> 파일2: 파일1의 내용을 파일2 끝에 연결
  • $ exit: 터미널 종료

* 버전만들기의 이미지 출처: 책'Doit! 지옥에서 온 문서관리자 깃&깃허브 입문'의 이미지를 수정하여 사용함