[TIL / Git] CLI 버전 관리와 백업

Changyun Go·2022년 2월 6일
0
post-thumbnail

Command Line Interface를 통해 Git을 사용하는 방법

CLI의 장점

  1. 명령어의 특성상 처리해야할 일을 한번에 명령할 수 있다.
  2. GUI를 사용할 수 없는 서버 환경에서도 사용할 수 있다.

작업 공간

Working Tree

버전으로 만들어지기 전의 수정한 내용이 들어있는 곳

Staging Area

하나의 버전으로 만들고 싶은 파일들을 올려놓는 곳

Local Repository

작업하고 버전을 생성하는 PC의 지역 저장소

Remote Repository

백업이 저장되는 원격 저장소

직접 원격 저장소를 운영하기 쉽지 않기 때문에 Git hosting을 많이 이용한다. → GitHub, GitLab..

명령어

새로운 폴더 만들기 : mkdir 폴더명

git init

git init .으로 현재 디렉토리의 버전 관리를 시작한다.
git init 폴더명 으로 폴더 생성과 초기화를 동시에 할 수 있다.

파일 내용 확인 : cat 파일명 / type 파일명

이전 디렉토리 : cd ..

폴더 내 모든 파일 보기 : ls -al / dir /a

  • .git이라는 디렉토리에 버전 관리에 대한 정보가 들어있다. 절대 지우면 안 된다.

git status

git status로 Working Tree의 상태를 볼 수 있다.

  • No commits yet.. : 아직 커밋 되지 않은 상태
  • Untracked files.. : 한 번도 스테이지에 올라가지 않은 파일이 있다. → 백업하거나 협업하고 싶지 않은 파일은 untracked로 내버려 두면 된다. git은 모든 파일을 자동으로 tracking 하지 않는다.
    • 버전 관리하지 말아야 할 파일은 fsutil file createnew .gitignore 0으로 .gitignore 파일을 만들어 내부에 파일명을 입력하면 git이 해당 파일을 자동으로 무시한다.

git add

git add 파일명으로 Staging Area에 파일을 올릴 수 있다.

git add .으로 현재 디렉토리 밑에 있는 모든 파일을 add할 수 있다.

git commit

git commit -m “커밋 메시지”로 커밋할 수 있다.

git commit -am “커밋 메시지”로 add와 커밋을 한 번에 할 수 있다. → untracked 상태에서는 사용이 불가능하다.

git commit --amend로 커밋 메시지를 수정할 수 있다.

에디터를 이용해 커밋 메시지를 작성하는 방법

에디터를 이용하면 여러 줄의 메시지를 입력할 수 있다.

git commit만 입력하면 에디터가 실행된다.

  • 기본 에디터에서는 i 한번 누르면 입력 가능, 완료 후 esc 누르고 : wq / w!(강제)
  • 에디터 설정 : git config --global core.editor “nano” / git config --local core.editor notepad

git log

git log로 폴더의 버전 관리 이력을 볼 수 있다.

git log --stat로 각 로그마다 연루된 파일을 볼 수 있다.

git log -p로 로그에서 버전 별로 변경된 점을 볼 수 있다.

git diff

git diff로 마지막 버전과 Working Tree에 있는 파일 내용의 차이점을 비교할 수 있다.

  • 최종적으로 검토할 수 있는 기회를 제공한다.
  • diff tool을 이용해서 차이점을 보다 정교하게 비교할 수 있다.

git checkout

git checkout 커밋 아이디로 해당 버전의 시점으로 이동할 수 있다. → 커밋 아이디는 git log에서 copy할 수 있다.

git checkout main을 하면 다시 최신 버전으로 돌아갈 수 있다. → main은 최신 버전을 가리킨다.

  • HEAD가 가리키는 값을 바꾸는 것이다.

git reset

git reset --hard로 Working Tree에서 작업한 내용을 삭제할 수 있다.

git reset --hard 커밋 아이디로 해당 버전의 시점으로 리셋할 수 있다.

git revert

git revert 커밋 아이디로 해당 버전의 시점으로 되돌아갈 수 있다.

  • 로그를 삭제하지 않으면서 되돌아갈 수 있기 때문에 삭제와 보존의 목적을 모두 달성할 수 있다.

1 ⇒ 2 ⇒ 3 ⇒ 4 이런 식으로 버전이 있을 때
곧바로 버전 2로 revert하면 버전 1로 되돌아가지 않는다. → 버전 3으로 revert한 다음, 버전 2로 하나씩 revert해야 충돌이 발생하지 않는다.

revert는 해당 커밋까지의 모든 변화를 되돌리는 것이 아니라 그 커밋에서의 변화만을 되돌리는 것이기 때문이다.

git remote

git remote add 원격 저장소 주소로 지역 저장소에 원격 저장소를 연결할 수 있다.

git remote add **origin** 원격 저장소 주소 이런 식으로 원격 저장소마다 별명을 붙일 수 있다.

git remote로 어떤 원격 저장소가 있는지 확인할 수 있다.

git remote -v를 하면 원격 저장소의 주소까지 볼 수 있다.

git push

git push로 지역 저장소의 내용을 원격 저장소로 백업할 수 있다.

  • 최초 1회에 git push -u origin main로 어떤 원격 저장소를 디폴트로 할 것인지 설정할 수 있다. → 이후 git push만 하면 자동으로 origin에 main 브랜치가 업로드된다.

git clone

git clone 원격 저장소 주소 (저장 위치)로 원격 저장소를 지역 저장소로 복제할 수 있다.

현재 디렉토리 표시 : pwd / cd

  • 여러 대의 컴퓨터가 똑같은 파일을 갖게 할 수 있다.

git pull

git pull로 원격 저장소의 내용을 지역 저장소로 가져올 수 있다.

  • 원격 저장소를 이용한 작업은 pull ⇒ 작업 ⇒ commit ⇒ push로 진행되어야 한다.

pull 하지 않고 작업할 경우 or 동시에 작업할 경우

git push하면 rejected(거절)된다. ⇒ 여기서 pull을 통해 충돌을 발생시킨다.

충돌을 수동으로 해결하고 git commit을 하면

이렇게 두 개의 브랜치 모두를 조상으로 하는 새로운 커밋이 생성된다.

  • 가능하면 commit과 push를 자주 하고 pull을 통해 혹시 모를 업데이트를 확인하는 것이 반드시 필요하다.

git fetch

바로 pull 하지 않고 git fetch로 원격 브랜치만 가져올 수 있다.

이 상태에서 pull하거나 origin/main으로 merge하면

main이 원격 브랜치를 따라간다.

따라서 git pullgit fetch + git merge FETCH_HEAD와 같다.

  • 한 단계를 추가하여 pull 하기 전에 내용을 신중하게 검토할 수 있다.

Reference


0개의 댓글