2_[git]버전만들기
[GIT]버전만들기
01. 작업트리
와 스테이지
, 저장소
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. 깃이 버전을 만드는 과정
source from https://mung0001.github.io/ST.png , Do it! 지옥에서 온 문서 관리자 깃 & 깃허브 입문
- hello.txt 파일 문서를 수정하고 저장하면, 그 파일은
작업트리
에 존재 수정한 hello.txt 파일을 버전으로 만들고 싶을 때 스테이지에
그 파일을 넣는다(위의 그림의 “1”)커밋(commit) 명령
을 통해서 버전이 생성되면서 스테이지에서 대기하던 파일들이 모두저장소
에 저장된다!
03. 작업트리에서 vim으로 문서 수정하기
저는 우선 제가 TIL을 올리는 디렉터리에서 git bash로 수행해보았습니다
ⓐ 터미널 창에 git status
를 입력해보면 아래와 같은 화면이 보일 것인데
각 결과의 의미는 아래와 같다
"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 모두가 된다)
ⓓ 그리고 생성된 파일을 ls -al
로 확인하고, git status
를 체크해보면
아래와 같이 확인되는데 이를 해석해보면 아래와 같다
"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
여전히 untracked files로 이미지들이 확인된다.
상대적으로 가장 상위 폴더라 할 수 있는 TIL 폴더로 이동한 후
git add .
후 git status
를 해보면 더이상 버전 관리가 되지 않은 파일들에 이미지들이 표시되지 않는다!
이 때 나타나는 new file:
이라는 수식어는 새 파일 ~를 (앞으로) 커밋할 것
이라는 의미를 갖는다! 이제 스테이지에 파일들이 올라갔고, 버전을 만들 준비가 끝났다!
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) 작성 일자 및 시간(타임존 기반)
을 확인해볼 수 있다
이렇게 되면 지금은 작업 트리와 저장소에 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
위의 경우에는 이전버전에서는 파일이 존재하지 않았는데 이번 버전에서는 파일이 생성되었다는 의미이다
git diff 커밋아이디1..커밋아이디2
: 커밋아이디1과 커밋아이디2 사이의 소스상의 차이점을 보여줌
-각각의 커밋은 각자 고유의 아이디 번호가 있다! 그것이 바로 로그 결과의 “commit~”내용 중 “~”에 해당되는 숫자와 영어의 조합이다![맨 첫줄]
-커밋아이디는 각 버전의 고유값!
$ git diff d73c36e1f85c8ad64488b07c574637918f0056ed..40d344f73631bd8f15d90fe50d01eeaf85037ffc
위와 같이 테스트해보면, ..을 기준으로 앞부분을 보다 최근의 아이디이고 뒷부분을 이전 아이디로 적어서 테스트해보았는데 그 결과 이전에는 vcsTest.txt와 hello2.txt가 없었는데 생성되었음을 확인해볼 수 있다
[—가 이때는 ..기준으로 앞과 뒤 중 “앞”에 해당되는데, 위의 경우는 “최근”이 된다!◀️ 최근값을 왼쪽에 두었기 때문에]
- vim에디터를 이용해서 파일 수정 후
git diff
▶️ 이전 버전과 달라진 부분을 확인
vim hello.txt
로 파일을 수정하고
get diff
를 입력하면 아래와 같이 이전에는 hello2.txt에서 버전관리 테스트 깃 최고 222의 내용이 있었는데, 지금은 아래와 같은 내용이 추가되었음을 확인해볼 수 있다
즉, 이를 통해서 내용변경을 확인해볼 수 있다
이는 커밋 전 작업 내용의 문제점을 마지막으로 확인해볼 수 있는 리뷰기회를 가질 수 있도록
도와준다![버전관리 시스템의 효용!]
+버전관리 테스트 깃 최고 222111111111111111111
+깃 수정수정
+git diff 테스트중
08. 과거로 돌아가기(현재의 로그를 취소하고 과거의 로그로 돌아가기)
- 아래의 두 방법은 비슷한듯 다르다!
- 만약의 상황을 위해서 .git이 포함된 폴더를 복사해둔 후 이 작업을 하는 것을 권장!
- 가장 처음에 했던 test git 커밋 메시지가 있는 버전으로 돌아가도록 해보자!
- 돌아가고 싶은 과거의 버전 값-b5bf9f06eb45f2233cfccca0f4f58fabdd08df31
- 현재 버전 값 - d73c36e1f85c8ad64488b07c574637918f0056ed
08-1. 과거로 돌아가기 방법1-reset
git reset 과거값 —hard
지금의 경우에는 git reset b5bf9f06eb45f2233cfccca0f4f58fabdd08df31 --hard
로 실행해주면 된다!
그러면, b5bf9f06eb45f2233cfccca0f4f58fabdd08df31 버전까지 없어지는 것이 아니라
b5bf9f06eb45f2233cfccca0f4f58fabdd08df31버전이전까지만 사라지는 것
이다! 즉, [최근,과거) 가 사라지는 버전이다!
- —hard 옵션은 위험하긴 한데 매력적!(복잡하지 않다 😢)- 작업트리까지 업데이트
🌹 깃에서 알아둘 것 🌹
ⓐ 깃에서는 왠만해서는 어떠한 정보도 삭제하지 않는다
- 따라서 우리가 삭제했다고 생각해도 어딘가에 남겨져 있다!
- 따라서 나중에 복구할 수 있다!
ⓑ 자신의 버전을 원격연결을 통해 공유를 할 수 있는데, 공유한 이후에는 절대로 reset해서는 안된다!(본인의 컴퓨터 내에서만 리셋해야 한다!)
08-2. 과거로 돌아가기 방법2-revert
- 커밋을 취소하면서 새로운 버전을 생성하는 방법
- 나중에 이해해보도록! 나중에 긴박할때 공부하라!😭
➕ git commit
을 입력하고 나타나는 vim 에디터에서 커밋 버전을 기입해줘도 된다!!
➕ git commit --help
를 입력하면 commit에 대한 도움을 받을 수 있는 사이트를 확인해볼 수 있다