개인 공부를 하며 정리한 글입니다.
틀린 부분, 수정할 부분이 있다면 언제든 피드백 환영입니다 :)
git은 설치하셨다는 가정으로 시작하겠습니다.
먼저 시간을 관리하는 법에 대해 보겠습니다.
Git의 3가지 공간인 Working directory, Staging Area, Repository 가 아닌,
참조했던 얄코님의 강의 비유를 빌려 , '타임캡슐에 물건을 넣고 보고 땅에 묻는다' 란 컨셉으로 이야기 하겠습니다.
1. Git 최초 설정
Git 전역으로 사용자 이름과 이메일 주소를 설정
- GitHub 계정과는 별개
#협업시 윈도우와 맥에서 엔터 방식 차이로 인한 오류를 방지.
$ git config --global core.autocrlf true
#GitHub 계정과는 별개로
#Git 전역으로 사용자 이름, 이메일 주소를 설정
$ git config --global user.name "Merge"
$ git config --global user.email "Merge@gmail.com"
#다음 명령어로 확인
$ git config --global user.name
$ git config --global user.email
#기본 브랜치명 변경
$ git config --global init.defaultBranch main
📢 --global 명령어는 프로젝트 단위가 아닌 깃 전체의 설정을 할 때 사용한다.
2. 저장소 설정(git init) : 타임캡슐 준비하기
먼저 git에서 관리할 폴더를 생성한다.( 저는 git_upload란 폴더를 생성했습니다.)
그리고 그 폴더에서 git init 를 입력하면
해당 폴더에 Repository 가 생성 되며 master branch 가 생성됨
(저는 VS Code 에서 bash 활성화 후, 진행했습니다)
$ git init
그럼 폴더에 숨김 모드로. git 폴더가 생성된 것을 확인 가능.
(.git 디렉토리에는 저장소에 필요한 뼈대 파일(Skeleton)이 있고 add와 commit 의 명령어로 git의 파일관리가 시작된다.)
이 폴더를 지우면 git 에서 할 수 있는 시간, 차원 관리가 불가능해진다.
- git bash 에서는 (main) 라는 표식이 달리게 된다
- 현재 작업 중인 대상(브렌치)을 의미한다.
만든 폴더에 파일과 내용을 대충 만들어주고 저장 후, 아래 명령어를 입력하면 확인할 수 있다.
$ git status
git status 명령어는....
- 명령어가 동작하지 않을 때 에러 확인
- 내가 작업한 파일 외에 다른 파일이 수정되진 않았는지 확인
- 항상 commit 전에는 git status 로 add 가 빠진 파일이 없는 지 확인 후, commit 할 것
📢 좀 더 내용을 짧게 보고 싶다면
$ git status -s
3. 특정 파일/폴더를 숨기려면? ( .gitignore)
.gitignore 란 파일을 만든 후
그 파일 안에 파일/폴더명을 적어주면 된다.
.gitignore 파일 생성시 자동으로 git 이미지 아이콘이 뜨는 걸 확인할 수 있다.
(스프링, 기타 프레임워크 에서 .gitignore 이란 폴더가 종종 있는 것을 확인할 수 있는데,
그게 commit 하지 않으려는 파일 / 폴더의 목록이다)
3-1. .gitignore 의 형식
# 모든 file.txt
file.txt
# 최상위 폴더의 file.txt
/file.txt
# 모든 .txt 확장자 파일
*.txt
# .txt 확장자지만 무시하지 않을 파일
!not_ignore_this.txt
# B 란 이름의 파일 또는 폴더와 그 내용들
B
# B 이름의 폴더와 그 내용들
B/
# B 폴더 바로 안의 debug.log와 .txt 파일들
B/debug.log
B/*.txt
# B 폴더 바로 안, 또는 그 안의 다른 폴더(들) 안의 debug.log
B/**/debug.log
자세한 사항은 https://git-scm.com/docs/gitignore 참조
4. 임시저장(add) : 타임캡슐 안에 물건 담기
- 파일 하나 리스트에 담기
$ git add A.txt
A.txt 란 파일을 Staging Area 라고 하는 임시저장소에 보관한다.
- 모든 파일 리스트에 담기
git add .
5. commit : 타임캡슐 묻기
위에서 캡슐에 넣은 물건들을(add) 땅에 묻는다고 생각하면 된다.
$ git commit
그럼 아래와 같은 Vi 모드가 나오게 된다.(Vi 혹은 Vim 모드는 마우스 사용이 안된다.)
작업Vi 명령어상세
입력 시작 | i | 명령어 입력 모드에서 텍스트 입력 모드로 전환 |
입력 종료 | ESC | 텍스트 입력 모드에서 명령어 입력 모드로 전환 |
저장 없이 종료 | :q | |
저장 없이 강제 종료 | :q! | 입력한 것이 있을 때 사용 |
저장하고 종료 | :wq | 입력한 것이 있을 때 사용 |
위로 스크롤 | k | git log등에서 내역이 길 때 사용 |
아래로 스크롤 | j | git log등에서 내역이 길 때 사용 |
i -> First Commit 이라고 적고 -> ESC -> :wq
위 메세지 입력을 커밋과 동시에 하는 방법도 있다.
git commit -m "First Commit"
커밋 내용을 확인해 보려면
$ git log
5-1. 파일 변경이 생겼을 시
만약 B.txt 파일을 삭제하고,C.txt 가 새로 생성되었다고 가정해보자.
그리고 git status를 입력하면 파일 존재유무 변경사항들을 확인할 수 있다.
좀 더 자세히 파일안 내용이 변경된 점도 확인하고 싶다면
$ git diff
❗ 단. git diff 는 add 가 아직 안된 파일들 내용만 보여준다.
그리고 상당히 내용이 길게 나오기에 다음과 같은 단축키를 사용해야 한다.
작업Vi 명령어상세
위로 스크롤 | k | git log등에서 내역이 길 때 사용 |
아래로 스크롤 | j | git log등에서 내역이 길 때 사용 |
끄기 | :q | :가 입력되어 있으므로 q만 눌러도 됨 |
q를 눌러 Vi모드를 끈 뒤,
$ git add .
로 현재 버젼을 리스트 업 한 후,
git status 로 확인을 하면 아래처럼 적용된 내역을 확인할 수 있다.
그리고 메세지와 함께 commit 을 하자.
git commit -m "Replace B with C"
그리고 git log로 다시 확인!
🔊 add 와 commit을 한꺼번에 하는 법
git commit -am "(메시지)"
- ✨ 단, 새로 추가된(untracked) 파일이 없을 때 한정. 추가 파일이 있을 시 add, commit을 따로 해야한다.
위를 보면 같은 Leopars.txt 가 녹색과 빨간색 두개 다 있다.
(Staged 상태이면서 동시에 Unstaged 상태, 이후에 자세히 다루겠다)
이는 한번 커밋 후, 추가 수정을 하고 add를 안해서 이런 현상이 발생된거다.
지금 이 시점에서 커밋을 하면 git commit 명령을 실행하는 시점의 버전이 커밋되는 것이 아니라
마지막으로 git add 명령을 실행했을 때의 버전이 커밋된다.
그러니까 git add 명령을 실행한 후에 또 파일을 수정하면 git add 명령을 다시 실행해서
최신 버전을 Staged 상태로 만들어야 한다.
6. 과거 내역으로 되돌리기
과거 내역을 불러올 때는 2가지 방법이 있다.
Reset | Revert |
원하는 시점으로 돌아간 뒤 이후 내역들을 삭제 | 되돌리기 원하는 시점의 커밋을 거꾸로 실행(삭제X) |
3 -> 1번째로 되돌아간 후 2,3 commit 내역 삭제 | 3 ->1 역순으로 실행하고 내역을 남긴다 (협업시 Revert를 사용해야함) |
6 -1. Reset
먼저 아래 명령어로 커밋 내역 확인
git log
총 5개의 커밋내역이 확인된다.(저는 추가 커밋을 했습니다)
4번으로 먼저 reset 해보겠습니다.
git reset --hard (돌아갈 커밋 해시)
해시는 위 빨간 네모 처리가 된 부분을 복붙하면 된다.
(다 안하시고 앞 6 - 7자리만 하셔도 됩니다)
$ git reset --hard e71342c0bbe83
git log 로 확인해보니 5번째 commit이 사라진 걸 볼 수 있다.
6 -2. Revert
$ git log
git log 실행하여 돌아갈 commit 의 해쉬값을 가져온 후,
$ git revert (되돌릴 커밋 해시)
실행시 아래와 같이 Revert 완료 됬다는 안내가 나온다.
git status 로 한번 더 확인해보면
기존 commit 내역은 그대로 존재하고 추가로 최 상단에 Revert 내역이 추가된 걸
볼 수 있다.
📢 revert 중 아래와 같은 충돌로 인한 오류를 만날 수도 있다.
그럴 경우는 해당 파일을 지워주고 다시 revert 를 진행시켜주면 된다.
$ git rm C.txt
$ git revert --continue
📢 커밋하지 않고 revert 를 하려면
git revert --no-commit (되돌릴 커밋 해시)
- 원하는 다른 작업을 추가한 다음 함께 커밋할 때 사용
- 취소하려면 git reset --hard
얄코님의 Git & GitHub를 정리하였습니다.
https://www.yalco.kr/@git-github/0-1/
'DevOps > Git' 카테고리의 다른 글
Github 에서 원격 저장소를 만들어 보자 (0) | 2024.03.20 |
---|---|
git 의 3가지 트리 그리고 rm, mv, restore, reset 옵션 (0) | 2022.06.30 |
SVN(Subversion) 과 Git 의 차이 (0) | 2022.06.30 |
Git, GitHub 사용하기 기초 3(pull, push, fetch) (0) | 2022.06.29 |
Git, GitHub 사용하기 기초 2(Branch, merge, rebase) (0) | 2022.06.29 |