본문 바로가기

DevOps/Git

Git, GitHub 사용하기 기초 1 (init, add, commit, reset, revert)

개인 공부를 하며 정리한 글입니다.

틀린 부분, 수정할 부분이 있다면 언제든 피드백 환영입니다 :)

 

 

 

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 Bash Here 를 선택하면 Bash 창을 띄울 수 있다.

$ git init

그럼 폴더에 숨김 모드로. git  폴더가 생성된 것을 확인 가능.

(.git 디렉토리에는 저장소에 필요한 뼈대 파일(Skeleton)이 있고 add와 commit 의 명령어로  git의 파일관리가 시작된다.)

 

이 폴더를 지우면 git 에서 할 수 있는 시간, 차원 관리가 불가능해진다.

  • git bash 에서는 (main) 라는 표식이 달리게 된다
  • 현재 작업 중인 대상(브렌치)을 의미한다.

 

만든 폴더에 파일과 내용을 대충 만들어주고 저장 후, 아래 명령어를 입력하면 확인할 수 있다.

 

$ git status

main 브렌치 상황은 아직 commit 된 게 없고 add도 안된 git 관리 준비 중인 파일 A.txt, B.txt가 있다.

git status 명령어는....

  • 명령어가 동작하지 않을 때 에러 확인
  • 내가 작업한 파일 외에 다른 파일이 수정되진 않았는지 확인
  • 항상 commit 전에는 git status 로 add 가 빠진 파일이 없는 지 확인 후, commit 할 것

📢 좀 더 내용을 짧게 보고 싶다면

$ git status -s

3. 특정 파일/폴더를 숨기려면? ( .gitignore)


.gitignore 란 파일을 만든 후

그 파일 안에 파일/폴더명을 적어주면 된다.

.gitignore 파일 생성시 자동으로 git 이미지 아이콘이 뜨는 걸 확인할 수 있다.

(스프링, 기타 프레임워크 에서 .gitignore 이란 폴더가 종종 있는 것을 확인할 수 있는데,

그게 commit 하지 않으려는 파일 / 폴더의 목록이다)

hide.txt를 적고 저장했더니 왼쪽 리스트에서 투명 처리가 되었다.
그럼 원래 있던 hide.txt 는 git 관리 리스트에서 빠진 걸 확인할 수 있다.


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 라고 하는 임시저장소에 보관한다.

untracked files : 아직 add가 안된 파일이 있다는 뜻이다

 

  • 모든 파일 리스트에 담기
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

위와 같은 화면이 나오면서 commit이 되었다고 알려준다

 

위 메세지 입력을 커밋과 동시에 하는 방법도 있다.

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

 

Cheetas.txt를 지우고 Panthers.txt을 새로 만들었던 5번째 commit이
4번째로 돌아가면서 Cheetas.txt가 생기고, 5번째 추가했던 Panthers.txt가 사라졌습니다.

 

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://youtu.be/1I3hMwQU6GU

https://www.yalco.kr/@git-github/0-1/