5 minute read

[GIT]버전만들기

01. 작업트리스테이지, 저장소

https://mung0001.github.io/ST.png

source from https://mung0001.github.io/ST.png , Do it! 지옥에서 온 문서 관리자 깃 & 깃허브 입문

ⓐ 작업 트리 Working Tree

  • “작업 디렉터리 Working Directory”
  • 우리 눈에 보이는 디렉터리!(예: TIL 폴더)
  • 파일 수정, 저장 등의 작업을 수행하는 디렉터리

ⓑ 스테이지 Stage

  • “스테이징 영역 Staging Area”
  • 버전으로 만들 파일이 **대기**하는 공간
  • (ex)작업트리에서 10개 파일을 수정했는데, 이 중에서 3개 파일만 버전으로 만드려면 3개 파일만 스테이지로 넘겨주면 된다!

ⓒ 저장소 Repository

  • 스테이지에서 대기하고 있던 파일들을 **버전으로 만들어 저장**하는 곳

📌 .git 폴더 ◀️ 스테이지 + 저장소

02. 깃이 버전을 만드는 과정

https://github.com/hy6219/TIL/blob/main/gitStudy/doItStudy/versionControl/%EA%B9%83%EC%97%90%EC%84%9C%20%EB%B2%84%EC%A0%84%EC%9D%84%20%EA%B4%80%EB%A6%AC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png?raw=true

source from https://mung0001.github.io/ST.png , Do it! 지옥에서 온 문서 관리자 깃 & 깃허브 입문

  1. hello.txt 파일 문서를 수정하고 저장하면, 그 파일은 작업트리에 존재
  2. 수정한 hello.txt 파일을 버전으로 만들고 싶을 때 스테이지에 그 파일을 넣는다(위의 그림의 “1”)
  3. 커밋(commit) 명령을 통해서 버전이 생성되면서 스테이지에서 대기하던 파일들이 모두 저장소에 저장된다!

03. 작업트리에서 vim으로 문서 수정하기

저는 우선 제가 TIL을 올리는 디렉터리에서 git bash로 수행해보았습니다

ⓐ 터미널 창에 git status를 입력해보면 아래와 같은 화면이 보일 것인데

https://github.com/hy6219/TIL/blob/main/gitStudy/doItStudy/versionControl/git%20status.PNG?raw=true

각 결과의 의미는 아래와 같다

  • "On branch main. Your branch is up to date with 'origin/main'"
: 현재 main 브랜치 에 있고

당신의 브랜치는 origin/main으로 달려 있다

  • nothing to commit : 커밋할 것은 없다
  • working tree clean: 작업트리는 비어있다

ⓑ 아래와 같이 새로운 문서를 만들기 위해서 새로운 폴더를 만들자

mkdir vcsTest

cd ./vcsTest

vim hello.txt를 입력해서 hello.txt 파일을 만들자

내용은 자유롭게 입력하고, esc키+:wq 를 눌러서 저장해주자!(입력을 위해서는 알파벳 i 키를 눌러주면 insert 모두가 된다)

https://github.com/hy6219/TIL/blob/main/gitStudy/doItStudy/versionControl/vim%20make%20txt%20file.PNG?raw=true

ⓓ 그리고 생성된 파일을 ls -al 로 확인하고, git status를 체크해보면

아래와 같이 확인되는데 이를 해석해보면 아래와 같다

https://github.com/hy6219/TIL/blob/main/gitStudy/doItStudy/versionControl/%EC%83%9D%EC%84%B1%EB%90%9C%20%ED%8C%8C%EC%9D%BC%20%EC%B2%B4%ED%81%AC%20%ED%9B%84%20git%20status%20%ED%99%95%EC%9D%B8.PNG?raw=true

  • "On branch main. Your branch is up to date with 'origin/main'"
: 현재 main 브랜치 에 있고

당신의 브랜치는 origin/main으로 달려 있다

  • Untracked files : 아직 한번도 버전관리하지 않은 파일

-hello.txt파일을 만들고 과정을 기록하기 위해서 이미지를 캡쳐했는데 그러한 파일이 먼저 확인되는 것을 확인해볼 수 있다

🌟 지금까지는 hello.txt파일은 “작업트리 Working tree”에 있는 것이다!!

04. 수정한 파일을 스테이징하기 git add

  • 작업 트리에서 파일을 만들거나 수정했다면, 스테이지에 이러한 파일을 추가하는데, 이는 깃에게 버전을 만들 준비를 하라고 알려주는 것인데 이것이 바로 스테이징 Staging 혹은 스테이지에 올린다 라고 표현된다
  • git add 는 최초 생성 시와 수정 시 모두에 적용해주어야 할 명령어!

git add . 혹은 git add hello.txt

위를 입력해서 업로드할 파일을 추가해주자(선택적으로 파일을 버전으로 만들 수 있음)

그리고 git status 를 입력해주면 아래와 같이 표시되는데

Changes to be committed: (use “git restore –staged ..." to unstage) new file: hello.txt

여전히 untracked files로 이미지들이 확인된다.

상대적으로 가장 상위 폴더라 할 수 있는 TIL 폴더로 이동한 후

git add .git status를 해보면 더이상 버전 관리가 되지 않은 파일들에 이미지들이 표시되지 않는다!

이 때 나타나는 new file: 이라는 수식어는 새 파일 ~를 (앞으로) 커밋할 것 이라는 의미를 갖는다! 이제 스테이지에 파일들이 올라갔고, 버전을 만들 준비가 끝났다!

https://github.com/hy6219/TIL/blob/main/gitStudy/doItStudy/versionControl/git%20add%20%ED%9B%84%20git%20status.PNG?raw=true

04-1. 스테이지에 올릴 때 경고 메시지가 나타나는 이유

앞서서 hello.txt 파일을 만들고 스테이징할 때,

warning: LF will be replaced by CRLF in gitStudy/vcsTest/hello.txt. The file will have its original line endings in your working directory

위와 같은 경고 문구를 확인하게 된다

그 이유는 윈도우의 개행 문자와 리눅스의 개행 문자가 다르고,

윈도우에서 문서 저장 시 줄바꿈 위치에서 CRLF문자(Carriage Return Line Feed)[CR: \r, LF:\n] 가 삽입되기 때문에 발생한 것이다!

이 때 깃에서는 자동으로 CRLF 문자를 LF 문자로 변환해서 커밋할 것이라는 메시지이다! 사용자가 별도로 조치할 필요는 없다!

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

  • 커밋 : 버전을 만드는 것

ⓐ 깃에서 파일을 커밋하는 명령은 git commit 이고, -m 옵션을 붙이면 커밋과 함께 저장할 메시지(커밋메시지)를 적을 수 있다!

git commit -m ‘test git’

ⓑ 이제 결과를 통해 커밋메시지를 가장 첫 줄에서 확인해볼 수 있고, 5개 파일에 변경되었고, 파일에 1개의 내용이 추가되었다고 나타난다!

[main ~] test git

5 files changed, 1 insertion(+)

ⓒ 이제 git status를 입력하면, 깃 상태가

  • nothing to commit : 버전으로 만들 파일이 없다
  • working tree clean : 작업트리도 수정사항 없이 깨끗하다

라고 표시되는 것을 확인해볼 수 있다

git log를 입력해보자

  • 그러면 아래처럼 지금까지 진행된 커밋(버전만들기)한 버전에 대해서

1) 커밋 메시지

2) 작성자(git config --global user.name, git config --global user.email 로 설정해둔 내용 기반)

3) 작성 일자 및 시간(타임존 기반)

을 확인해볼 수 있다

https://github.com/hy6219/TIL/blob/main/gitStudy/doItStudy/versionControl/git%20log.PNG?raw=true

이렇게 되면 지금은 작업 트리와 저장소에 hello.txt 등의 파일이 존재하게 되는 것이다!

(스테이지에서 저장소로 파일들이 이동)

06. 스테이징커밋 한번에!! git commit -am

  • -am 옵션을 이용하면 스테이지에 올리고 커밋하는 과정을 한꺼번에 처리할 수 있다![=add+commit]
  • 이 방법은 vim 에디터를 켜지 않고도 인라인에서 처리할 수 있는 방식
  • 위와 같이 할 수 잇는 것은 -a 옵션은 변경된 파일을 모두 자동적으로 스테이징해주는 옵션이고, -m 옵션은 커밋 메시지와 함께 커밋을 하는 옵션인데 이 둘이 합쳐졌기 때문이다!
  • 이 방법은 한 번이라도 커밋한 적 있는 파일을 재커밋할 경우에만 사용 가능하다! 👈 a

위의 “a” 이유로, 미리 만들었던 hello.txt를 수정해주자

그 후, git commit -am 'commit with am option test' 를 입력해주자

그 후 git log 에서 위의 커밋 버전을 확인해볼 수 있다

07. 커밋 메시지의 역사를 알아보는 git log

  • git log -p : 각각의 커밋커밋 사이의 소스 간 차이점을 볼 수 있음

-그 중 +++로 된 부분이 최근 변경된 파일/이번 버전의 내용을 나타내고, —-로 된 부분이 이전 버전의 내용을 나타낸다

—- /dev/null, +++ b/f2.txt

위의 경우에는 이전버전에서는 파일이 존재하지 않았는데 이번 버전에서는 파일이 생성되었다는 의미이다

https://github.com/hy6219/TIL/blob/main/gitStudy/doItStudy/versionControl/git%20log%20-p.PNG?raw=true

  • git diff 커밋아이디1..커밋아이디2 : 커밋아이디1과 커밋아이디2 사이의 소스상의 차이점을 보여줌

-각각의 커밋은 각자 고유의 아이디 번호가 있다! 그것이 바로 로그 결과의 “commit~”내용 중 “~”에 해당되는 숫자와 영어의 조합이다![맨 첫줄]

-커밋아이디는 각 버전의 고유값!

$ git diff d73c36e1f85c8ad64488b07c574637918f0056ed..40d344f73631bd8f15d90fe50d01eeaf85037ffc

위와 같이 테스트해보면, ..을 기준으로 앞부분을 보다 최근의 아이디이고 뒷부분을 이전 아이디로 적어서 테스트해보았는데 그 결과 이전에는 vcsTest.txt와 hello2.txt가 없었는데 생성되었음을 확인해볼 수 있다

[—가 이때는 ..기준으로 앞과 뒤 중 “앞”에 해당되는데, 위의 경우는 “최근”이 된다!◀️ 최근값을 왼쪽에 두었기 때문에]

https://github.com/hy6219/TIL/blob/main/gitStudy/doItStudy/versionControl/git%20diff%20%EC%BB%A4%EB%B0%8B%EC%95%84%EC%9D%B4%EB%94%941..%EC%BB%A4%EB%B0%8B%EC%95%84%EC%9D%B4%EB%94%942.PNG?raw=true

  • vim에디터를 이용해서 파일 수정 후 git diff ▶️ 이전 버전과 달라진 부분을 확인

vim hello.txt

로 파일을 수정하고

get diff

를 입력하면 아래와 같이 이전에는 hello2.txt에서 버전관리 테스트 깃 최고 222의 내용이 있었는데, 지금은 아래와 같은 내용이 추가되었음을 확인해볼 수 있다

즉, 이를 통해서 내용변경을 확인해볼 수 있다

이는 커밋 전 작업 내용의 문제점을 마지막으로 확인해볼 수 있는 리뷰기회를 가질 수 있도록 도와준다![버전관리 시스템의 효용!]

+버전관리 테스트  최고 222111111111111111111
+ 수정수정
+git diff 테스트중

https://github.com/hy6219/TIL/blob/main/gitStudy/doItStudy/versionControl/git%20diff.gif?raw=true

08. 과거로 돌아가기(현재의 로그를 취소하고 과거의 로그로 돌아가기)

  • 아래의 두 방법은 비슷한듯 다르다!
  • 만약의 상황을 위해서 .git이 포함된 폴더를 복사해둔 후 이 작업을 하는 것을 권장!
  • 가장 처음에 했던 test git 커밋 메시지가 있는 버전으로 돌아가도록 해보자!
  • 돌아가고 싶은 과거의 버전 값-b5bf9f06eb45f2233cfccca0f4f58fabdd08df31
  • 현재 버전 값 - d73c36e1f85c8ad64488b07c574637918f0056ed

08-1. 과거로 돌아가기 방법1-reset

git reset 과거값 —hard

지금의 경우에는 git reset b5bf9f06eb45f2233cfccca0f4f58fabdd08df31 --hard 로 실행해주면 된다!

그러면, b5bf9f06eb45f2233cfccca0f4f58fabdd08df31 버전까지 없어지는 것이 아니라 b5bf9f06eb45f2233cfccca0f4f58fabdd08df31버전이전까지만 사라지는 것이다! 즉, [최근,과거) 가 사라지는 버전이다!

  • —hard 옵션은 위험하긴 한데 매력적!(복잡하지 않다 😢)- 작업트리까지 업데이트

Git - Reset 명확히 알고 가기

🌹 깃에서 알아둘 것 🌹

ⓐ 깃에서는 왠만해서는 어떠한 정보도 삭제하지 않는다

  • 따라서 우리가 삭제했다고 생각해도 어딘가에 남겨져 있다!
  • 따라서 나중에 복구할 수 있다!

ⓑ 자신의 버전을 원격연결을 통해 공유를 할 수 있는데, 공유한 이후에는 절대로 reset해서는 안된다!(본인의 컴퓨터 내에서만 리셋해야 한다!)

https://github.com/hy6219/TIL/blob/main/gitStudy/doItStudy/versionControl/%EA%B3%BC%EA%B1%B0%20%EC%BB%A4%EB%B0%8B%20%EC%83%81%ED%83%9C%EB%A1%9C%20%EB%8F%8C%EC%95%84%EA%B0%80%EA%B8%B0-reset.PNG?raw=true

08-2. 과거로 돌아가기 방법2-revert

  • 커밋을 취소하면서 새로운 버전을 생성하는 방법
  • 나중에 이해해보도록! 나중에 긴박할때 공부하라!😭

git commit 을 입력하고 나타나는 vim 에디터에서 커밋 버전을 기입해줘도 된다!!

git commit --help 를 입력하면 commit에 대한 도움을 받을 수 있는 사이트를 확인해볼 수 있다

Updated: