SEB(11-12일차, Git), 2주차 마무리

Jogi's 코딩 일기장·2021년 6월 25일

11-12일차 (Git 기초)

11일차가 되는 날 git 기초에 대해 배우기 시작했고 그 다음날까지 git 명령어과 github 어떻게 사용하는지에 실습을 진행했다.
이제 배운 것들을 토대로 다시 정리 및 회고를 해보겠다.

Git 개념정리

  • Git : 개발자의 코드를 효율적으로 관리하기 위해서 개발된 '분산형 버전 관리 시스템이다. 소스코드가 변경된 이력을 쉽게 확인할 수 있으며, 특정 시점에 저장된 버전과 비교하거나 특정시점으로 되돌아 갈 수도 있다.

  • Github

    • Git repository를 관리할 수 있는 클라우드 기반 서비스이다.
    • Git으로 버전을 관리하는 폴더에 대해서 Github를 통해 여러 사람들이 공유하고 접근할 수 있다.
    • Git repository : 내가 작업하는 소스 코드 폴더가 버전 관리를 받기 위해 Git으로 관리되는 폴더이다.
      • Remote Repository : 공유
      • Local Repository : 작업

Git 명령어

명령어에 들어가기 앞서 fork라는 것이 있는데 이는 다른 곳에 있는 원격 저장소를 내 원격 저장소로 가져오는 작업이다.

이 사진의 오른쪽 상단을 보면 fork라는 것이 있는데 저것을 클릭하고, 내 Repository를 클릭하면 내 저장소를 폴더를 가져올 수 있다.

  • init

    • 기존 디렉토리를 Git Repository로 변환한다
    • 기존 프로젝트를 Git Repository로 변환하거나 새로운 Repository로 초기화하는데 사용한다.
    • init을 하고나면 Local Repository가 생성된다.
      git init
  • clone

    • 내 원격 저장소로 옮겨온 코드를 수정하기 위해 내 컴퓨터로 가져오는 작업이다. 이는 Remote Repository에 있는 코드를 clone해서 내 컴퓨터에 가져온다는 말이다.

      git clone <Repository address>

      이와 같이 입력을하면
      clone을 하게되면 username과 password입력 후 clone을 할 수 있다. 확인을 하면 폴더가 생긴 것을 확인할 수 있다.

  • add
    - 파일을 commit할 수 있는 상태로 만들어 준다.
    - 내 컴퓨터 workspace에서 작업에 들어간 파일들을 git 관리하에 있는 상태로 올려준다는 말과 같다. 올려준 영역을 staging area라고 하며 이 영역에 들어갔다면 staged file이며, 이 영역에 없다면 unstaged or untracked file이라고 한다.

    git add <file name> // 내 local의 untracked file을 staging area로 추가한다
    git add .  // staging area에 모든 파일을 한 번에 추가한다. 단, 올리지 말아야 할 파일들이 있을 수 있으므로 주의
  • status

    • 명령어를 통해 staging area와 untracked files 목록에 어떤 것들이 있는지를 확인할 수 있다.
  • restore
    - 변경사항을 폐기하는 명령어. commit되지 않은 Local Repository의 변경사항을 폐기할 수 있다.

    git restore <file name>
  • commit

    • 수정 작업이 끝났을 때 변경사항을 저장한다.
    • staging area에 들어온 파일들은 commit이 가능한데, 이를 수행하면 내 Remote Repository에 push해서 commit 기록을 Remote에도 남겨줄 수 있다.
      git commit  -m 'commit message'    or
      git commit 
    • git commit만 하게 되면 commit message를 남길 창이 뜨는데 거기에서 규격에 잘 맞게 commit message를 잘 작성하여 종료하면 바로 commit된다.
  • reset
    - Local에서 commit한 내용을 취소할 때 사용한다.
    - Remote Repository에 업로드 되지 않고, Local Repository에만 commit을 했다면 취소가 가능하다.

    git reset HEAD^   or  git  reset HEAD
  • push

    • Local에서 변경, commit된 사항을 Remote Repository에 업로드한다.
    • 내 Local Repository의 commit 기록들을 Remote Repository로 업로드하기 위해 아래 명령어를 실행한다.
      git push <origin> <branch>  // origin master, origin main을 많이 활용한다.
      상황에 따라 git push 뒤에 오는 명령어는 바뀔 수 있다.
  • log

    • 현재까지 commit한 내역들을 터미널 창에서 확인할 수 있다.
      git log
      제일 위에 오는 commit이 제일 최근의 commit이다.
  • remote

    • Local Repository를 Remote Repository에 연결한다.
    • git remote add origin <Repository address> : 나의 Remote Repository에 연결한다.
    • git remote add <other alias> <Repository address> : other의 Remote Repository에 연결한다.
    • git remote -v : Local Repository와 연결된 Remote Repository를 확인할 수 있다.

      내 Local Repository에 연결된 Remote Repository를 확인한다.
  • pull
    - Remote Repository의 작업 내용을 내 Local Repository로 가져온다.
    - 받아오는 내용은 자동으로 병합(merge)되지만 conflict가 나는 경우가 있다. 그 때는 조치를 취해줘야 한다.

    git pull <shortname> <branch>  // remote  repo의 해당 branch 내용을 local로 가져온다.

    1개의 파일이 바뀌었으며, 2개의 삽입이 있다고 알려준다.README.md가 바뀐 것을 알 수 있다.

  • 충돌 해결하기

    • 같은 부분을 변경한 내용이 존재해 자동으로 병합할 수 없는 경우
    • git status 명령어를 통해 어떤 파일이 충돌하고 있는지 확인할 수 있다.
    • 충돌한 파일을 열어보면 어떤 부분에서 충돌했는지 확인이 가능하다.
    • 충돌 파일을 열어보면 3가지의 옵션이 있고 그 옵션을 이용해 충돌을 해결하거나 직접 수정해서 충돌을 해결할 수 있다.
      1. Accept Current Change : 내가 수정한 내용으로 파일에 반영한다.
      2. Accept incoming Change : Remote Repository의 내용으로 파일에 반영한다.
      3. Accept both changes : 변경 사항을 모두 반영한다.
      4. 직접 수정해서 반영한다.
    • 수정을 마치면 병합 커밋을 생성해주기 위해서 staging area로 추가해야한다. 이는 우리가 위에서 거쳤던 add, commit, push의 과정을 거친다.
    • merge commit은 자동으로 생성된다 git commit을 하면 메시지가 생성되지만 이도 원래 commit과 같이 -m옵션을 주어 메시지를 수정할 수 있다. question.txt에서 conflict가 발생했고 이로 인해 자동 병합이 안된 모습이다.

      status를 통해 확인하니 병합이 되지 않은 것을 확인할 수 있다. 일단 파일을 수정해준 후 다시 과정을 거친다. 수정 후 과정을 거치니 제대로 push가 되는 상황이다.

    이와 같이 git에 대해 배우고 실습을 진행했으며, 꽤 어려움도 있었고 집중하면서 할 수 있었던 것 같다.

2주차를 마치며..

이번 주는 내가 배우던 것과 많이 달랐던 것들을 배웠다. html이며 css며 CLI, git 등을 배웠다. 저번 주에 비해 내가 많이 모르는 것들을 해보니 시간도 많이 걸리고 이해하는데 어려움이 있었던 것 같다. 아직도 초반이라 기초 중에 기초들을 배웠는데 배운 것들을 바로 적용하는데 어려움은 없었지만 또 그렇다고 쉽게 바로 적용시키진 못했던 것 같다. 특히 이번 주에 배운 것들을 가지고 꽤 오랫동안 배울 것 같은데 기초를 튼튼히 해야 앞으로 배우는 것에 있어서 어려움이 그나마 덜 수 있을 것 같다. 새로운 것들을 배울 수 있는 좋은 한 주 였던 것 같다. 물론 좋은 페어분들을 만나서 잘 진행할 수 있었던 것도 크다. 다음 주에도 어려움은 있을 것이지만 잘 이겨내서 내것으로 만들고 싶다!!

Reference

  • 코드스테이츠(CodeStates) 강의자료
profile
프로그래머로서의 한걸음

0개의 댓글