Git CLI (Command Line Interface) (1)

이현정·2022년 4월 2일
1

지금까지 마우스로 한 깃헙 과정을 터미널의 명령어로 하는 방법을 배워볼 것이다.

CIL로 add, commit, push 하기

git log: 커밋 히스토리 확인
git add (파일명): 하나의 변경된 파일을 working area 에서 staging area로 이동
git add .: 현재 폴더에 변경된 "모든" 파일들을 staging area로 이동
git commit -m ("커밋 메세지"): 커밋하기
git push origin (브랜치명): 원격 저장소로 푸시하기. (참고로 해당 브랜치가 master 일 경우, 최신 업데이트 버전에서는 main 으로 그 이름이 바뀌었다고 한다.)

실전

echo "(메세지)" >> (파일 또는 폴더)
// " "안의 메세지를 >> 오른쪽 파일을 생성하고 그 안에 추가
git init
// git 저장소 생성(초기화)
git add README.md
// README.md 를 staging area (git 이 추적하는 상태) 로 끌어올리기. 혹은 git add . 로 모든 변화다 끌어올려도 됨.
git commit -m "first commit"
// 끌어올려진 staging area 에 있는 변화들을 local storage master 브랜치에 커밋(저장)
git branch -M main
git branch (-m | -M) (oldbranch) (newbranch) 는 oldbranch 가 newbranch 로 이름이 바뀐다.
git remote add origin (원격 저장소 url)
// 해당 원격저장소
git push -u origin main
// origin(local repo)의 main 브랜치에 푸시한다. -u 를 통해 모든 브랜치에 upstream 브랜치를 추가한다._

※ 참고: git log 나가는 법 => q
※ 참고: git log 를 통해 각 커밋의 고유 번호를 알 수 있다.

CIL로 커밋 삭제하기

실수로 커밋한 부분을 삭제하고 싶을 때는 2가지 방법이 있다:

  • git check out 이용하기
  • git reset 이용하기

1) git check out (커밋 고유 번호) : HEAD 를 과거 commit 으로 옮긴다. HEAD 는 현재 커밋의 위치를 나타낸다. 커밋의 고유번호는 git log 를 통해 얻을 수 있다.

2-1) git reset --hard HEAD(^ n개): 하드 리셋.🌟 --hard 는 강하게 과거로 돌아가는 것, 즉 이전 기록을 아예 삭제해버리는 것을 의미한다. ^의 갯수는 몇 개 전의 커밋으로 돌아갈 것인지를 말한다. 예를 들어 ^를 하나 넣으면 바로 그 전 단계의 커밋으로 돌아가며, --hard 덕에 그 커밋 이후의 커밋 기록들은 전부 삭제된다.
.
2-2) git reset HEAD(^ n개): 복합 리셋 🌟 해당 커밋의 n개전 커밋 이후의 모든 커밋을 working stage로 되돌린다. 아직 수정할 게 남았는데 실수로 커밋했을 때 가장 많이 사용하는 리셋이다.
.
2-3) git reset HEAD(^ n개) --soft : 소프트 리셋. 되돌릴 커밋의 변경사항을 unstage 영역에 추가하지 않고 stage 영역에 추가한다. unstage 영역에 작업중인 파일이 있을 때 섞이지 않고 싶을 때 사용한다. 대부분의 경우에는 하드 리셋이나 복합 리셋을 사용하면 된다

마지막으로 git push origin master --force: 통해 삭제될 거 삭제된 새로운 커밋 히스토리를 원격 저장소에 반영해 주면 된다.

CIL로 브랜치 생성 및 삭제

원하는 과거 커밋 시점으로 돌아가 그곳에서부터 새로운 브랜치 만들기를 해보자.

  1. 원하는 커밋 상태로 돌아가기
    git checkout (커밋번호)
  2. 새 브랜치 만들기
    git checkout -b (브랜치명) 혹은 git branch (브랜치명)

※ 1과 2를 한꺼번에 하기
git checkout (커밋번호) -b (브랜치명)

※ 브랜치 목록 보기
git branch

※ 마스터 브랜치로 돌아가기
git checkout master

※ 브랜치 삭제
git branch -d (브랜치명)

CIL로 커밋 수정하기

커밋을 이미 했는데 깜빡하고 파일 하나를 잊었다면?
그 파일 하나만 새로 커밋하며 또다른 커밋을 만들 수 있지만, 고작 하나의 파일 가지고 새로운 커밋을 하다니... 성에 차지 않는다. 기존 커밋에 이 파일 하나만 끼워 넣고 싶다. --amend 를 이용하면 working area 의 수정사항을 마지막 커밋 속으로 넣어준다.

■ 커밋 수정(amend)은 가장 마지막 커밋을 수정하는 것

git commit --amend -m "(메시지)"
git commit --amend --no-edit
---no-edit ▷ 커밋 메세지는 수정하지 않는다

하지만 가장 좋은 방법은 역시 커밋 전 한 번더 확인해 실수를 줄이는 것일 것이다.

■ 커밋 전 커밋될 변경사항들 확인하기

git status
▷ staging area 에 있지 않은 파일은 빨간색으로 표시: 이게 다음 커밋 때 커밋될 변경사항들이다.
▷ staging area 에 있는 파일은 초록색으로 표시

■ 만약 올리지 말아야할 파일을 깃헙에 이미 푸시했다면?

  1. git rm -r (제거할 파일/폴더) --cached: 먼저 깃헙에 푸시된 파일 또는 폴더를 이 명령어로 삭제해준다. rm 은 remove 를 뜻한다. -r 은 폴더 제거시 사용하는 옵션이다. cached 는 이미 커밋된 걸 삭제할 때 필요하다.
  2. touch .gitignore : gitignore 파일 생성
  3. .gitignore 파일에 git 에 푸시하지 않기를 원하는 파일이나 폴더명 아래와 같이 적어준다.
    .hello.txt  // hello.txt 파일 git add . 시 제외
    img/ // img 폴더 git add . 시 제외

💬 느낀점

1개의 댓글

comment-user-thumbnail
2022년 6월 2일

이틀에 한 번씩 커밋 메시지를 수정하는 헬렌입니다.

답글 달기