[Git & GitHub] 버전 관리(시간 여행하기)

킹발·2022년 10월 4일
0

Git & GitHub

목록 보기
2/2
post-thumbnail

1. 버전을 타임캡슐에 담기

git을 사용하는 이유 중에 하나인 버전 관리를 하기 위해서는 버전 각각의 체크포인트를 우리는 기록을 해놓아야 한다.

1-1. 변경 사항 확인

$ git status

tracked 파일 : 이전에 git에서 버전관리를 한 적이 있기 때문에 git에서 수정 여부를 추적한다.
untracked 파일 : 한번도 버전관리를 한 적이 없기 때문에 git에서 수정 여부를 추적할 수 없다.

1-2. 변경 사항 타임캡슐에 담기

$ git add 파일명
$ git add .

2. 타임캡슐 묻기

버전에 사용할 파일들을 타임캡슐에 담았다면 이제 나중을 위해 땅에 묻어야 한다. 그치만 묻기전에 괜한 삽집을 하지 않도록 message를 담은 메모를 달아 놓자.

2-1. 메모 달고 땅에 묻기

Commit Message

기본 구조

type(scope) : title

body(본문, 생략 가능)
Resolves : #issueNo, ...(해결한 이슈 , 생략 가능)
See also : #issueNo, ...(참고 이슈, 생략 가능)

기본 규칙

  • 제목과 본문을 빈 행으로 구분
  • 제목은 영문 기준 50글자 이하
  • 첫 글자는 대문자로 작성
  • 제목 끝에 마침표X
  • 제목은 명령문으로 사용, 과거형X
  • 본문의 각 행은 영문 기준 72글자 이하
  • 어떻게 보다는 무엇과 왜

Type

Type 키워드사용 시점
feat새로운 기능 추가
fix버그 수정
docs문서 수정
style코드 스타일 변경 (코드 포매팅, 세미콜론 누락 등) ,
기능 수정이 없는 경우
design사용자 UI 디자인 변경 (CSS 등)
test테스트 코드, 리팩토링 테스트 코드 추가
refactor코드 리팩토링
build빌드 파일 수정
ciCI 설정 파일 수정
perf성능 개선
chore빌드 업무 수정, 패키지 매니저 수정 (gitignore 수정 등)
rename파일 혹은 폴더명을 수정만 한 경우
remove파일을 삭제만 한 경우

Vim으로 메세지 입력하기

$ git commit
작업Vi 명령어상세
입력 시작i명령어 입력 모드에서 텍스트 입력 모드로 전환
입력 종료ESC텍스트 입력 모드에서 명령어 입력 모드로 전환
저장 없이 종료:q
저장 없이 강제 종료:q!입력한 것이 있을 때 사용
저장하고 종료:wq입력한 것이 있을 때 사용
위로 스크롤kgit log등에서 내역이 길 때 사용
아래로 스크롤jgit log등에서 내역이 길 때 사용

한번에 메세지까지 입력하기

$ git commit -m "FIRST COMMIT"

2-2. Commit 기록 확인

$ git log
  • log를 통해 지금까지 땅에 묻어둔 타임캡슐들을 확인할 수 있다.

  • add, commit에 따른 그래프

3. 과거로 돌아가기

과거로 돌아가는 방법은 Reset, Revert 두 가지가 존재한다.

3-1. Reset

  • 원하는 시점으로 돌아간 뒤 이후 내역들을 모두 지운다.
  • 정말 시점도 과거로 돌아갔으니, 돌아간 시점부터 reset하기 전까지 했던 일들은 모두 사라진다.
  • 팀원간에 한 번이상 공유가 되었다면 reset으로 과거로 돌아갔다만 문제를 일으킬 수 있다.
    • 예를 들어 [재현]이가 새로운 코드를 짜다가 맘에 들지 않아서 고치던 commit들을 다 날려버리고 다시 과거로 되돌릴려고 한다. 이 때, reset을 사용해서 되돌리고 Remote repopush를 할 때 [재현]의 Local repo에는 없는 commit이 Remote repo에는 있을 것이고, commit 히스토리가 불일치해서 push할 때 충돌이 날 수 있다.

      하지만 [재현]이 혼자서 진행할땐 git push --force를 이용해서 강제로 할 순 있지만, [영철]이랑 같은 branch를 공유하는 협업하는 상황에서는 멋대로 commit 히스토리를 삭제한 [재현]이 탓에 [영철]이가 push할 때 충돌이 날 것이다.

option

  • --mixed(default) : Index 영역은 초기화되고 워킹디렉토리는 변경되지 않는다.
  • --hard : 워킹디렉토리와 Index 영역 모두 초기화 된다.
  • --soft : Index 영역과 워킹디렉토리 모두 변경되지 않는다.

3-2. Revert

  • 현재에 있으면서 과거의 특정 사건(commit)들만 없던 일로 만든다.
  • 예를 들어 과거 무언가를 추가하는 commit을 필요가 없을 때 revert를 사용하면 현재 시점에서 과거에 추가했던 것을 삭제하는 commit을 새로 실행한다.

0개의 댓글