[git & github] 내가 보려고 정리하는 글

권왈왈·2025년 9월 9일

1. GIT

1-1 깃이란?

깃이 제공하는 핵심 기능

  • 버전 관리
    변경 내역들을 기억하며 문서를 수정할 때마다 언제 수정했는지 어느 부분을 어떻게 수정했는지 구체적으로 기록하기 위한 버전 관리 시스템이다.
  • 백업
    필요하다면 원하는 버전으로 작업을 되돌릴 수 있다.
  • 협업
    여러 명의 코드를 쉽게 나누고 합치며 개발
    누가 어느 부분을 어떻게 수정했는지 기록이 남아 나중에 충돌, 오류가 생겼을 경우 파악하기 쉽다.

1-2 리눅스 명령어

  • $ pwd : 현재 위치 경로 확인
  • $ ls : 현재 디렉터리에 있는 파일/디렉터리 목록 보기

    ls 명령 옵션 모음
    ls -l : 파일과 디렉터리의 상세 정보까지 표시
    ls -a : 숨긴 파일과 디렉터리를 표시
    ls -r : 파일의 정렬 순서를 반대로 표시
    ls -t : 파일 작성 시간 순으로 표시
    (파일 자세히 보면 맨앞 d : 디렉터리, - : 폴더, l : 링크)

  • $ cd : 디렉터리 사이를 이동

    cd 명령 옵션 모음
    cd : 현재 접속중인 사용자의 홈 디렉터리로 이동
    cd / : 가장 상위 디렉터리로 이동
    cd ../ : 하나 상위 디렉터리로 이동
    cd (디렉터리명) : 해당 디렉터리로 이동

  • $ mkdir : 현재 디렉터리 안에 하위 디렉터리를 만듦
  • $ rmdir : 현재 디렉터리 안에 하위 디렉터리를 삭제함(빈 디렉터리만 삭제)
  • $ rm -rf : 폴더 강력 삭제(안에 파일이 있어도 삭제)
  • $ touch : 빈 파일 생성(해당 파일이 없으면 만들고, 있으면 수정날짜를 현재시간으로 만들어줌)
  • $ cp <원본> <타겟> : 파일 복사
  • $ mv <원본> <타겟> : 파일 이름 변경 (mv 파일 파일), 이동 (mv 파일 폴더)
  • $ rm -f <파일명> : 파일 삭제(파일명에 *입력 시, 디렉터리 내 파일 전체삭제)
  • $ vi <파일명> : 파일 수정

    vi 명령 옵션 모음
    - i : 편집모드
    - esc : 다시 명령모드로 빠져나오기
    - :w : 저장
    - :q : 나가기 (수정후에 그냥 나가려고 하면 안나가짐)
    - :wq : 저장 후 나가기
    - :q! : 수정한거 저장 안하고 나가기

  • $ cat <파일명> : 내용 보기

2. 깃 버전 관리

2-1-1. 깃이 관리하는 세 개의 공간

  • 작업 디렉터리 : 버전 관리의 대상이 위치하는 공간(프로그래밍 하는 공간)
  • 스테이지(인덱스) : 깃이 관리하는 가상의 공간, 다음 버전이 될 후보가 올라가는 공간
  • 저장소 : 깃이 관리하는 가상의 공간, 버전이 만들어지고 관리되는 공간

2-1-2. 하나의 버전이 만들어지는 과정

  1. 작업 디렉터리 내에서 변경 사항 생성 -> 일반적인 코딩 작업
  2. 스테이지로 add
  3. 저장소로 commit

    작업 디렉터리에서 스테이지로 수정사항을 올리는 것을 add라고 한다.

    스테이지에 있는 수정사항들을 저장소에 올리는 것을 commit이라고 한다.

    버전1 생성 완료

용어정리

add - 작업 디렉터리 내용을 스테이지에 올림
commit - 스테이지의 내용을 저장소에 올리는 것 , 버전을 commit으로 부르기도 함(버전- 논리적, 커밋- 물리적)
commit hash(커밋 해시) - 각각의 버전에 지칭된 고유한 정보(ID), 너무 길어서 앞에 7자리 잘라서 사용 (gui 보다 text모드에서 훨씬 중요)
tag(태그) - 특정 커밋을 좀 더 가독성 있도록 붙이는 꼬리표(버전 명으로 붙인다 실무에서 ver 1.0.0 이런식)

2-2. 깃 적용

2-2-1. 깃 저장소 만들기

저장소를 만들고 싶은 디렉터리로 이동해서 깃을 초기화 git init하면 그때부터 해당 디렉터리에 있는 파일들의 버전을 관리할 수 있다.

2-2-2. 작업 트리에서 문서 수정 후 스테이지에 올리기 - git add

  • $ git status : 깃 상태를 확인할 때 사용
  • $ git add : 작업 디렉터리에서 스테이지로 수정사항을 올릴 때 사용

    깃의 상태를 나타내는 메시지의 의미
    1. On branch master : 현재 master 브랜치에 있다.
    2. No Commits yet : 아직 커밋한 파일이 없다.
    3. nothing to commit : 현재 커밋할 파일이 없다.

2-2-3. 스테이지에 올라온 파일 커밋하기 - git commit

커밋할 때는 그 버전에 어떤 변경 사항이 있었는지 확인하기 위해 메시지를 함께 기록해 두어야 한다.

  • $ git commit -m "커밋 메시지"
  • $ git commit -am "커밋 메시지" : 한 번이라도 커밋한 적이 있는 파일을 다시 커밋할 때 스테이지에 올리고 커밋하는 과정을 한 번에 처리 가능

2-2-4. 커밋 내용 확인

  • $ git log : 현재까지 커밋했던 기록을 살펴보기 위한 명령

  • $ git log --oneline : 현재까지 커밋했던 기록을 한 줄로 볼 수 있음(커밋해시 일곱자리로 보여줌)

  • $ git log --patch : 각 커밋이 어떤 변경사항이 있는지 보여줌

  • $ git log --graph : 소스트리의 그래프를 터미널로 보여줌

  • $ git log --oneline --graph : 옵션을 섞을 수도 있음

  • $ git diff : 지금까지의 작업과 최신 커밋의 차이를 알려줌

    git diff 옵션 모음
    $ git diff --staged, $ git diff --cached : 스테이지와 비교함
    $ git diff <old커밋해시> <new커밋해시> : new가 old에 비해서 달라진 것

2-2-5. 태그 관리하기

  • $ git tag <태그명> : 최신 커밋에 태그
  • $ git tag <태그명> <커밋해시번호> : 특정 커밋에 태그 달기

    태그 목록 보기
    $ git tag
    $ git tag --list
    $ git tag -l
    태그 떼기
    $ git tag --delete <태그명>
    $ git tag -d <태그명>

2-2-6. 작업 되돌리기

버전을 되돌리는 방법

  • revert : $ git revert <마지막커밋해시>
    버전을 되돌린 새로운 버전 만들기
    999 -> 1000 -> 1001(999)
    모든 버전이 유지된 채, 되돌린 새로운 버전을 만든다
  • reset
    버전을 완전히 되돌리기
    • soft : $ git reset --soft 커밋 사실만 지우기
    • mixed : $ git reset (--mixed)스테이지에 추가한 사실까지 지우기
    • hard : $ git reset --hard 작업 디렉터리 변경사항까지 지우기
      세번째까지 버전을 만들엇는데 첫번째 버전에서 소프트 리셋을 하면 두, 세번째 버전은 다 날라간다.
      soft, mixed는 코드가 자꾸 꼬여서 hard가 제일 깔끔하다
      근데 불안하니까 백업(dump)해두기 -> 백업은 반드시 다른 장치, 다른 네트워크 저장, 백업은 클라우드에

2-2-7. 작업 임시 저장하기

  • stash : 마지막 커밋 이후 작업한 내용을 안쓰게 됐을 때 임시보관하면서 날리는 거
    스태시 전

    git status -> 아무것도 안나옴
    git diff -> 아무것도 안나옴
    작업 디렉터리 수정
    git status -> 수정 표시됨
    git diff -> 수정된 내용 보임

$ git statsh : 임시 저장
$ git statsh list : 임시 저장 리스트가 나옴. stash@{0}이 가장 최근 저장. 오래될수록 숫자 커짐
$ git stash -m "message" : 작업 내용 메시지를 남김
$ git stash apply stash@{번호} : 임시 저장을 적용
$ git stash drop stash@{번호} : 임시 저장을 삭제

profile
slow but steady

0개의 댓글