본문 바로가기
Deep Learning/연구.개발 관련 지식들

Git의 기초::변경 내용을 Stage하고 커밋하는 방법

by Steve-Lee 2019. 11. 19.

Git의 기초

본 자료는 Git의 기초를 확립하기 위해 Git-scm.com에서 제공하는 자료를 활용하였다. 학습 목적으로 Git의 기초를 정리하고자 한다.

 

Git의 기초

당장 프로젝트를 위해 Git을 써야하는데 시간이 없다면(이놈의 시간!)

Chap2. Git의 기초를 읽고 넘어가길 바란다

 

Git&Github에 대한 기초가 필요하다면 이전 포스팅을 추천한다

 

직관적으로 이해하는 Git & Github

본 정리노트는 투빅스 10기 정윤호의 Git강의와 강의자료를 바탕으로 작성되었습니다. 복습 및 학습 목적으로 정리합니다. 1. Git란 무엇인가? 파일 이름은 그대로 두고 버전 관리는 컴퓨터가 하게

deepinsight.tistory.com

 

Goal - 변경 내용을 Stage하고 커밋하는 방법

1. Git 저장소 만들기

앞으로 우리는 주로 다음의 두 가지 방법으로 Git을 사용하게 될 것이다

  1. 아직 버전관리를 하지 않은 로컬 디렉터리 하나를 선택해서 Git저장소를 적용하는 방법
  2. 다른 어딘가에서 Git 저장소를 clone하는 방법

어떤 방법을 사용하든 로컬 디렉토리에 Git저장소가 준비된다면 이제 뭔가 해볼수 있다

 

1) 기존 디렉토리를 Git저장소로 만들기

버전관리를 하든 하지 않든간에 기존 프로젝트를 Git로 관리하고 싶은 경우 우선 프로젝트의 디렉토리로 이동한다.

그리고 다음의 명령어를 실행한다.

$ git init

이 명령은 .git라는 하위 디렉토리를 만든다.

.git디렉토리에는 저장소에 필요한 뼈대 파일(Skeleton)이 들어있다. 이 명령만으로는 아직 프로젝트의 어떤 파일도 관리하지 않는다. Git파일을 관리하게 하려면 저장소에 파일을 추가하고 커밋해야한다.

 

  • git add
  • git commit

두 명령어를 사용한다.

$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'

2) 기존 저장소를 Clone하기

다른 프로젝트에 참여하려거나(Contribute) Git 저장소를 복사하고 싶을 때 git clone명령어를 사용한다.

$ git clone https://github.com/libgit2/libgit2

이 명령은 "libgit2"라는 디렉토리를 만들고 그 안에 .git 디렉토리를 만든다. 그리고 저장소의 데이터를 모두 가져와서 자동으로 가장 최신 버전을 checkout해놓는다.

2. Git의 기초 - 수정하고 저장소에 저장하기

수정하고 저장소에 저장하기

만질 수 있는 Git 저장소를 하나 만들었고 워킹 디렉토리에 Checkout도 했다.

이제 파일을 수정하고 파일의 스냅샷을 커밋해보자.

파일을 수정하다가 저장하고 싶으면 스냅샷을 커밋한다.

수정-스냅샷 ← VM 스냅샷과 비슷한 느낌아닌 느낌이다

Git이 알고있는 파일

  • Tracked
  • Untracked
  • Unmodified
  • Modified
  • Staged(커밋으로 저장소에 기록할...)

Fig. 파일의 라이프 사이클. (아직은 와닿지 않는다.)

Modified 상태의 파일을 Stage하기

이미 Tracked 상태인 파일을 수정하는 법을 알아보자.

CONTRIBUTING.md 라는 파일을 수정하고 나서 git status 명령을 다시 실행하면 결과는 아래와 같다.

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   CONTRIBUTING.md

Q. 출력이 의미하는 바가 무엇일까?

CONTRIBUTING.md파일은 "Changes not staged for commit"에 있다.

이 말인 즉 수정한 파일이 Tracked상태이지만 아직 Staged상태는 아니라는 것이다.

Staged상태로 만드려면 git add명령을 실행해야 한다.

 

  • git add
  1. 파일을 새로 추적할 때 사용
  2. 수정한 파일을 Staged상태로 만들 때도 사용한다.
  3. Merge할 때 충돌난 상태의 파일을 Resolve상태로 만들 때도 사용한다.

⇒ add의 의미는 프로젝트에 파일을 추가한다기 보다는 다음 커밋에 추가한다고 받아들이는 게 좋다.

$ git add CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README
    modified:   CONTRIBUTING.md

add 후 두 파일 모두 Staged 상태이므로 다음 커밋에 포함된다.

하지만 더 수정해야 한다는 것을 알게 되어 바로 커밋하지 못하는 상황이 되었다고 하자

CONTRIBUTE.md파일을 열고 수정한다. 이제 커밋할 준비가 되었다고 생각할 테지만, Git은 그렇지 않다.

git status 명령으로 파일의 상태를 다시 확인해 본다.

$ vim CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README
    modified:   CONTRIBUTING.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   CONTRIBUTING.md

CONTRIBUTE.md가 Staged 상태이면서 동시에 Unstaged 상태로 나온다.

git commit명령을 실행하면 명령을 실행하는 시점의 버전이 commit되는 것이 아니다.

마지막으로 git add명령을 실행했을 때의 버전이 commit된다.

따라서 git add명령을 실행한 후에 또 파일을 수정하면 git add 명령을 다시 실행해서 최신 버전을 Staged상태로 만들어야 한다.

⇒ git add CONTRIUTING.md

git status로 상태 확인하기!

$ git add CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README
    modified:   CONTRIBUTING.md

3. 문제 해결하기

수정된 파일을 add하고 commit하는 작업을 어제부터 했다...

문제는 add를 하고 commit을 하는 과정에서 수정 내용이 전혀 반영되지 않았다는 점이다...

(물론 내가 이해를 잘 못해서 어디서 어떻게 잘못됬는지 확인을 못한게 큰 것 같지만...)

아무튼 구글링과 숱한 삽질 끝에 git init을 제거하고 다시 git init을 했다...ㅠ

good news는 문제가 해결되었다는 점이고 bad news는 이전에는 왜 안됬는지 모르겠다는 것이다...

Mac 기준에서 .init파일을 삭제하는 방법은

sudo rm -r .git

 

수정된 파일을 commit에 추가하기 위해 add를 하고 status를 찍어보는 노력을 기울여야 할 것 같다. 당장에 어디서 꼬였는지 알 수 없어서 git을 초기화 시키는 극단의 수를 뒀지만... 예제와 같은 상황에 직면했을 때는 현명하게 대응해야지...

 

 

모두를 위한 cs231n (feat. 모두의 딥러닝 & cs231n)

cs231n 시작합니다! 안녕하세요. Steve-Lee입니다. 작년 2학기 빅데이터 연합동아리 활동을 하면서 동기, 후배들과 함께 공부했었던 cs231n을 다시 시작하려고 합니다. 제가 공부하면서 느꼈던 점들과

deepinsight.tistory.com

 

 

Git의 기초. 이전 commit을 삭제 하는 방법. file_size_limit 처리방법

Episde5: Large File을 Push하자 Error를 마주치게 되었다. 해석하자면 Git은 100.00MB파일까지 리모트 저장소에 저장이 가능해요 문제를 해결하는 방법으로는 두 가지 방법이 존재한다. 첫 째, gitignore File��

deepinsight.tistory.com

 

댓글