<깃 저장소 만들기>
저장소 : 폴더 안에 버전이 저장되는 공간

$ git init로 현재 디렉터리에서 깃을 사용할 수 있도록 초기화
>>Initialized empty Git repository ~ 메세지가 뜨면 hello-git에서 깃 아용 가능
파일 경로 끝에 (main)이라는 표시는 hello-git 디렉터리에 깃을 위한 저장소가 생겼다는 의미

ls -la 명령어로 숨긴 폴더까지 상세 정보 확인
git이라는 디렉터리 폴더는 깃을 사용하면서 버전이 저장될 저장소 (.git 디렉터리는 감춰져 있음)
<버전 만들기>
작업 트리 : 파일 수정, 저장 등의 작업을 하는 디렉터리, 앞의 hello-git 디렉터리가 작업 디렉터리 (우리 눈에 보임)
스테이지 : 버전으로 만들 파일이 대기하는 곳으로 작업 트리에서 파일 10개를 수정했는데 4개만 버전으로 만들려면 이 파일 4개만 스테이지로 넘겨주면 됨
저장소 : 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳
스테이지와 저장소는 눈에 보이지 않음 (.git 디렉터리 안에 숨은 파일 형태로 존재)
깃이 만들어지는 과정(예시)
hello.txt 파일 문서를 수정하고 저장하면 그 파일은 작업 트리에 있게 됨
>>수정한 hello.txt 파일을 스테이지에 넣음, 다른 파일도 수정한 뒤 스테이지에 넣어 둠
>>파일 수정을 끝내고 스테이지에 다 넣었다면 버전을 만들기 위해 깃에게 '커밋' 명령을 내림
>>새로운 버전이 생성되면서 스테이지에 대기하던 파일이 모두 저장소에 저장됨

$ git status 입력 >> 깃의 상태를 보여 주는 메시지
1. On branch main : 현재 main 브랜치에 있음 (main 브랜치는 저장소에 들어 있는 디렉터리와 비슷)
2. No commits yet : 아직 커밋한 파일이 없음
3. nothing to commit : 현재 커밋할 파일이 없음

hello.txt를 git-hello에서 만든 후 다시 깃 상태 확인
>>untracked files (버전을 아직 한 번도 관리하지 않은 파일) 생성, hello.txt는 untracked files
지금까지 작업 트리에서 문서 파일을 만든 것
git add (수정한 파일을 스테이지에 올리기)

git add 명령어로 파일을 스테이지에 추가
다시 깃 상태를 확인해보면 untracked files: 이라는 문구가 changes to be commited: 로 바뀌었음을 확인할 수 있음
hello.txt 파일 앞에 new file:이라는 수식어 추가 >> 새 파일 hello.txt를 (앞으로) 커밋할 것이다 라는 뜻
git commit (스테이징한 파일 커밋하기)

git commit 명령으로 파일을 커밋, -m 옵션을 붙이고 커밋과 함께 저장할 메시지를 적음
"1 file changed, 1 insertion(+)" >> 파일 1개가 변경되었고 파일에 1개의 내용이 추가됨 (스테이지에 있던 hello.txt 파일이 저장소에 추가된 것)
커밋 후 깃 상태를 보면 "nothing to commit(버전으로 만들 파일이 없고), working tree clean(작업 트리도 수정사항 없이 깨끗하다)"고 나타남
git log를 입력하면 방금 커밋한 버전을 설명하는 정보가 나타남(만든 사람, 만든 시각, 커밋 메세지)
>>스테이지에 있던 hello.txt파일의 버전이 만들어짐!
git commit -am (스테이징과 커밋 한꺼번에 처리)
한 번이라도 커밋한 적이 있는 파일을 다시 커밋할 때만 사용 가능

git commit -am 옵션을 붙여서 스테이징과 커밋을 한꺼번에 처리 가능
git log로 방금 커밋한 버전에 들어있는 정보 확인하면 가장 최근 버전 정보가 'massage2'라는 메시지와 함께 맨 위에 있는 것을 볼 수 있음
<커밋 내용 확인하기>
만든 버전을 확인하고, 버전마다 어떤 차이가 있는지 파악하면서 버전 관리 방법 알아보기
git log : 커밋했던 기록을 살펴보는 명령, 커밋해시/작성자/버전 만든 날짜/최신 버전/커밋 메시지/커밋 로그 등의 정보를 줌
커밋 해시 (깃 해시) : 커밋을 구별하는 아이디 / 커밋 해시 옆에 있는 (HEAD -> main)는 이 버전이 가장 최신이라는 표시
Author : 버전을 누가 만들었는지 / Date : 버전이 언제 만들어졌는지 / 커밋 메시지 : 작성자가 기록한 메시지
이렇게 git log 명령을 입력했을 때 나오는 정보를 묶어 간단히 커밋 로그라고 함
<변경 사항 확인하기>

git diff 명령을 사용하면 방금 수정한 hello.txt 파일이 저장소에 있는 최신 버전의 hello.txt와 어떻게 다른지 확인 가능
hello.txt에서 2를 지우고 two를 추가했는데 이 사실이 나타남을 확인할 수 있음
작업 트리에서 수정한 파일과 최신 버전을 비교한 후 수정한 내용으로 다시 버전을 만들려면 스테이지에 올린 후 커밋하고, 수정한 내용ㅇㄹ 버리려면 git restore 명령을 사용해 취소해야함
<버전 만드는 단계마다 파일 상태 알아보기>
깃에서는 버전을 만드는 단계마다 파일 상태가 달라짐
>> 파일 상태를 이해하면 이 파일이 버전 관리의 여러 단계 중 어디에 해당하는지, 그 상태에서 어떤 일을 할 수 있는지 알 수 있음
작업 트리에 있는 파일은 크게 tracked 상태와 untracked 상태로 나뉨

hello.txt 파일에는 3 추가 후 저장, hello2.txt 파일에는 abcd입력 후 저장 >> hello와 hello2 모두 작업 트리에 위치, git status 명령을 사용해 어떤 상태인지 확인
- 앞서 커밍했던 hello.txt 파일은 'Changes not staged for commit'이라고 되어있음 >> 변경된 파일이 아직 스테이지에 올라가지 않았다는 의미, 파일 이름 앞에 modified: 라고 되어 있어 hello.txt가 수정되었음을 확인 가능. 이처럼 깃이 계속해서 수정 사항이 있는지 추적하는 파일을 tracked파일이라고 함 (버전을 한 번이라도 만들었던 파일)
- 반면 hello2.txt 파일 앞에는 아무것도 없고 바로 위에 'untracked files:'라고 되어있음 >> hello2.txt파일은 한 번도 커밋하지 않았으므로 수정 사항을 추적할 수 없음, 따라서 untracked 파일이라고 표시
수정한 hello.txt파일과 수정하지 않은 hello2.txt파일 모두 git add 명령을 사용해서 스테이지에 올릴 수 있음
>>git status를 사용해 상태를 확인하면 마지막 버전 이후에 수정한 hello.txt는 modified:라고 표시되고, 한 번도 버전 관리를 하지 않은 hello2.txt는 new file:로 표시

커밋 메시지 작성 ("message3") >> git log를 이용하여 커밋이 성공적으로 되었는지 확인
커밋과 관련된 파일까지 함께 살펴보려면 git log 명령에 --stat 옵션 사용 (statics의 줄임말로, 커밋과 관련된 여러 통계 확인 가능)

가장 최근 커밋부터 순서대로 커밋 메시지와 관련 파일 나열 >> message3 커밋은 hello.txt, hello2.txt 파일과 관련되어 있고 message2는 hello.txt 파일과 관련되어 있다는 점 확인 가능
파일이 tracked 상태라면 깃 명령으로 현재 작업 트리에 있는지, 스테이지에 있는지 등 더 구체적으로 확인 가능
깃의 커밋 과정에서 tracked 파일의 상태 변화 확인

hello2.txt 파일을 수정 후 git status로 살펴보면 hello2.txt 파일이 수정되었고(modified) 아직 스테이지에 올라가지 않았다고 나타남 ('Changes not staged for commit') 즉 수정만 된 상태
>>git add 명령을 사용해 스테이지에 올리고 git status 명령 실행하면 'Changes to be committed'라는 메시지가 나타나면 커밋 직전 단계 즉 staged 상태가 됨

스테이지에 있는 hello2.txt 파일 커밋한 후 git status 명령 실행 >> 커밋을 끝내고 나면 hello2.txt 파일의 상태는 수정하기 직전인 unmodified 상태로 돌아감
<작업 되돌리기>
스테이지에 올렸던 파일을 내리거나 커밋을 취소하는 등 각 단계로 돌아가는 방법 알아보기

빔 편집기에서 hello.txt파일의 숫자 '3'을 'three'로 수정한 후 저장하고 편집기를 종료, git status 명령으로 상태 확인하면 hello.txt가 수정되었지만 아직 스테이지에 올라가 있지 않음('Changes not staged for commit'). 그리고 작업 디렉터리의 변경 사항을 취소하려면 restore 명령을 사용하라고 되어 있음(use "git restore <file> ... ~~")
git restore 명령으로 hello.txt의 수정을 취소한 후 cat 명령을 사용해 파일 내용을 확인해 보면 실제로 수정했던 3이 다시 나타났음을 확인 가능

마찬가지로 stage에 올린 hello2.txt파일을 다시 내리기 위해서는 git restore --staged hello2.txt 명령 사용 ( --staged 이 옵션만 사용하면 스테이지에 있는 모든 파일을 한꺼번에 되돌릴 수 있고, 뒤에 파일 이름을 붙이면 해당 파일만 골라서 되돌림)
<그 외의 수정 도구들>
- 최신 커밋 되돌리기 >> git reset HEAD^ (커밋을 취소하면 커밋과 스테이징이 함께 취소됨, HEAD^는 현재 HEAD가 가리키는 브랜치의 최신 커밋을 가리킴)
- 특정 커밋으로 되돌리기 >> git reset --hard (해시를 붙이지 않으면 최근 A커밋을 리셋하는 것이 아니라 최신 커밋을 A로 리셋하는 것)
- 커밋 변경 이력 취소하기 >>나중에 사용할 것을 대비해서 커밋을 취소하더라도 커밋했던 기록은 남겨두어야 할 때가 있음, 따라서 변경사항만 취소하고 커밋은 남겨 둠. git revert 명령 사용, 기본 편집기가 자동으로 나타나면 커밋 메시지 입력 가능 & 메시지 맨 위에는 어떤 버전을 revert 했는지 나타남. 커밋을 취소하면서 남겨 둘 내용이 있다면 문서 맨 위에 입력 후 저장.
출처 : Do it! 지옥에서 온 문서 관리자 깃&깃허브 입문 (이고잉 지음)
http://www.yes24.com/Product/Goods/113791485
'Study > Github 스터디' 카테고리의 다른 글
| 깃&깃허브 스터디 (5주차) (0) | 2023.04.15 |
|---|---|
| 깃&깃허브 스터디 (4주차) (0) | 2023.04.08 |
| 깃&깃허브 스터디 (3주차) (0) | 2023.04.01 |
| 깃&깃허브 스터디 (2주차) (0) | 2023.03.25 |
| 깃&깃허브 스터디 (1주차 - 1) (0) | 2023.03.17 |