도서 : Do it! 지옥에서 온 문서관리자 깃&깃허브 입문
갑자기 git 포스팅 하는이유: git 쓸 줄 몰라서.
git으로 할 수 있는 것
1. 버전 관리
2. 백업
3. 협업
Git Client Program(Git Program)
- 깃허브 데스크톱
- 토터스깃
- 소스트리 (본인 사용 중)
Git CLI (Git Command Line Interface)
터미널 창에 직접 명령 입력해서 사용하는 방식. 어려움.
이 방법에 익숙해지면 빠르게 깃을 다룰 수 있다.
본인은 이 방법을 배우기 위해서 책을 보고 공부 시작
깃 환경설정
1) 사용자 정보 입력 (git config)
git config --global user.name "사용자이름"
git config --global user.email "이메일주소"
--global 옵션: 현재 컴퓨터에 있는 모든 저장소에서 같은 사용자 정보를 사용하도록 설정
2) 디렉터리에 저장소 만들기
git init #깃 사용할 수 있도록 디렉터리 초기화
스테이지와 커밋
작업 트리(working tree): 파일 수정, 저장 등의 작업을 하는 디렉터리. 작업 디렉터리라고도 함.
즉, 내가 git init한 디렉터리를 의미
스테이지(stage): 버전으로 만들 파일이 대기하는 곳. 스테이징 영역(staging area).
ex) 작업트리에서 10개의 파일을 수정, 4개의 파일만 버전으로 만들려면 4개의 파일만 스테이지로 넘겨주면 된다
저장소(repository): 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳.
커밋(commit): 스테이지에 넣은 파일들을 버전으로 만들기 위해 하는 명령. 저장소에 저장됨.
[실습]
1. 작업트리로 이동 후 명령 입력
git status #깃 상태 확인 명령어
- On branch master: 현재 master 브랜치에 있음
- No commit yet: 아직 커밋한 파일이 없음
- nothing to commit: 현재 커밋할 파일이 없음
2. 파일 생성
3. 깃 상태 확인
branch master에 hello.txt라는 untracked files이 있다고 함.
untracked files: 한번도 버전관리 하지 않은 파일
4. 수정된 파일을 스테이징
스테이징: 작업 트리에서 파일을 만들거나 수정했다면, 스테이지에 수정한 파일을 추가하는 행위
git add hello.txt #스테이징 시 사용하는 명령어
경고의 의미: 깃에서 자동으로 텍스트 문서의 CRLF 문자를 LF 문자로 변경해서 커밋할 것이다.
5. 깃 상태 확인
untracked files 문구가 changes to be committed 로 변경됨. (staged 상태)
new file 수식어도 추가됨.
=> 새 파일 hello.txt를 앞으로 커밋할 예정이다.
6. 스테이지에 올라온 파일 커밋하기
git commit -m "message1" # -m 옵션: 커밋과 함께 저장할 메시지를 함께 적을 수 있음.
파일 1개가 변경되었고, 파일에 1개 내용이 추가되었다.(+)
notthing to commit, working tree clean: 버전으로 만들 파일이 없고, 작업 트리도 수정사항 없이 깨끗하다.
7. 버전이 제대로 만들어졌는지 확인하기
git log
Author: 커밋을 만든 사람
Date: 커밋을 만든 시간
+ 커밋 메시지
※ 스테이징 + 커밋 한번에 처리하기
git commit -am "message"
테스트를 위해 hello.txt 수정
커밋 로그
git log: 지금까지 커밋했던 기록을 살펴보기 위한 명령어.
(HEAD -> master) 표시가 있다면, 해당 버전이 최신 버전인 것.
그리고 commit ~어쩌구는 커밋 해시(commit hash) 또는 깃해시(git hash)라고 부른다.
커밋을 구분하는 아이디.
변경 사항 확인하기
1. 확인을 위해 hello.txt 내용 수정
2. 깃 상태
hello.txt파일이 수정되었고, 스테이징 상태가 아니라고 나온다.
3. 변경사항 확인
git diff
- 최신버전과 비교했을 때 hello.txt에서 hello 2가 삭제되었고, hello two가 추가되었다.
- 작업트리에서 수정한 파일과 최신 버전을 비교한 후, 수정한 내용으로 다시 버전을 만들려면 스테이징+커밋
- 수정한 내용을 버리려면 git checkout 명령 사용하여 수정 내용을 취소한다.
tracked file, untracked file
작업 트리에 있는 파일은 tracked 상태와 untracked 상태로 나뉜다.
1. hello.txt 파일 수정, 새로운 파일(hello2.txt) 생성
2. 깃 상태 확인
- hello.txt 파일이 변경되었으며, 변경된 파일이 스테이지에 올라가지 않았다고 표시됨.
깃은 한 번이라도 커밋을 한 파일을 계속해서 추적함. ▶ tracked 파일
- hello2.txt 파일 앞에는 아무것도 없다. 한번도 깃에서 버전관리를 하지 않았기 때문이다.
수정 내역을 추적하지 않음. ▶ Untracked 파일
3. 수정한 파일과 생성한 파일 모두 스테이지에 올린 후 깃 상태 확인.
수정된 hello.txt는 modified로, 한 번도 버전관리 하지 않은 hello2.txt는 new file이라고 표시됨.
4. 커밋 후 로그 확인
커밋과 관련된 파일까지 함께 확인하고 싶을 때 git log 명령어 stat 옵션을 추가한다.
git log --stat
※ 특정 파일/디렉터리 제외하고 버전관리 하기
.gitignore 파일 만들어서 목록 지정 가능.
해당 파일 안에 버전 관리 하지 않을 파일/디렉터리 이름이나 확장자를 입력하면 된다.
# .gitignore 예시
mynote.txt
temp/
.swp
※ 방금 커밋한 메시지 수정하기
git commit --amend
가장 최근의 커밋 메시지를 수정하려면 --amend 옵션을 사용한다.
스테이징 되돌리기
1. hello2.txt 파일 수정 후 스테이징
괄호 내용: use "git restore --staged <file> ..." to unstage
스테이지에서 내리려면 git restore를 사용하라
어라? 책 내용이랑 다르네
2-1. 스테이징 되돌리기 (책 ver)
git reset HEAD hello2.txt
reset 시 Unstaged changes after reset: 메시지 확인 가능. 스테이지에서 내려졌다.
깃 상태 확인해보면, 파일이 아직 스테이지에 올라가기 전으로(not staged) 돌아감.
2.2. 스테이징 되돌리기(메시지 ver)
최신 커밋 되돌리기
1. hello2.txt 파일 수정 후 스테이징+커밋
2. git log
3. 최신 커밋 되돌리기
git reset HEAD^ #커밋도 취소, 스테이지에서도 내려감. 취소한 파일이 작업트리에만 남는다
HEAD^는 현재 HEAD가 가리키는 브랜치의 최신 커밋을 가리킨다.
git log 실행 시 커밋에 (HEAD -> master) 표시가 있던 부분을 의미.
# git reset 명령 옵션 살펴보기
명령 | 설명 |
--soft HEAD^ | 최근 커밋을 하기 전 상태로 작업 트리를 되돌린다. |
--mixed HEAD^ | 최근 커밋과 스테이징을 하기 전 상태로 작업 트리를 되돌린다. 옵션 없이 git reset 시 디폴트로 적용 |
--hard HEAD^ | 최근 커밋과 스테이징, 파일 수정을 하기 전 상태로 작업 트리를 되돌린다. 해당 옵션으로 되돌린 내용은 복구 불가능함. |
특정 커밋으로 되돌리기
최신 커밋을 되돌리는 것 외에 특정 버전으로 되돌린 다음, 그 이후 버전을 삭제할 수도 있음.
이 때 커밋 해시를 사용한다.
1. rev.txt 새로 만든 후 커밋 * 4번 반복
2. 커밋 해시를 사용하여 특정 버전으로 되돌리기
※ 주의사항: reset A 입력 시 A 커밋을 리셋하는 것이 아닌, 최근 커밋을 A로 리셋하는 것.
(A커밋 삭제가 아니라 A커밋 이후에 만들었던 커밋을 삭제하고, A커밋으로 이동)
git reset --hard 복사한 커밋 해시
3. 결과
커밋 삭제하지 않고 되돌리기
커밋으로 되돌릴 때 수정했던 것들을 삭제해도 된다면 git reset 명령을 사용.
나중에 사용할 것을 대비해서 커밋을 되돌리더라도 취소한 커밋을 남겨두어야 할 때 사용한다.
git revert
1. rev.txt 수정 후 커밋
rev.txt의 내용: a b
수정 후 rev.txt 내용: a b e
2. 가장 최근에 커밋한 R5 버전을 취소하고, R2로 돌아갈 것.
reset의 경우, R2로 가기 위해서 reset 명령 뒤에 R2의 커밋 해시를 작성.
revert의 경우, revert 명령 뒤에 취소하려고 하는 버전을 작성(R5)한다.
revert 명령을 사용하면, 설치할 때 지정했던 기본 편집기가 자동으로 나타나며.. 커밋 메시지를 입력할 수 있음.
커밋 메시지 맨 위에는 어떤 버전을 revert 했는지 나타나있다.
revert하면서 추가로 남겨둘 내용이 있다면 입력 후 저장하자.
3. 결과
로그에 R5를 revert했다는 새로운 커밋이 생겼다.
기존의 R5 커밋도 사라지지 않음. 그 대신 R5에서 변경했던 이력을 취소한 새로운 커밋을 만든 것.
vim을 통해 rev.txt를 확인해보자.
'기타' 카테고리의 다른 글
클라우드 서비스(SaaS, PaaS, IaaS, FaaS) 개념 (0) | 2022.10.23 |
---|---|
[Git] 깃허브로 협업하는 방법, 공동작업자 추가, 협업 흐름 (0) | 2022.10.13 |
[Git] Git bash로 깃허브(Github) 연동하기, HTTPS와 SSH (0) | 2022.10.12 |
[Git] 브랜치(Branch), 병합(Merge), 체크아웃, stash 스택 (0) | 2022.10.10 |
[C#] 매개변수 ref와 out (0) | 2022.06.20 |