Git의 명령어와 작업 영역을 연결하여 이해하기 위해 두 질문에 대해 답변을 작성함
- git add, commit, push, pull 명령어를 git의 작업영역과 관련지어 설명하기
개념
git의 작업 영역은 코드의 버전 관리를 위한 4가지로 구분할 수 있다.
작업영역 4가지
- working_directory
- 코드를 작성하는 작업 공간
- git 명령을 실행하기 전에는 변경 사항을 추적하지 않음
- staging_area
- working_directory에서 변경된 파일을 임시로 저장하는 공간
add
- local_repository
- remote_repository
- 코드 공유, 협업을 위한 온라인 상의 원격 저장소
push
, pull
명령어
git add
working_directory에서 변경된 파일을 staging area에 저장한다.
git commit
staging_area에 추가된 변경사항들을 메세지와 함께 local_repository에 저장한다.
git push
local_repository에서 remote_repository 업로드한다.
git pull
remote_repository에서 local_repository로 가져온 뒤 working_directory로 덮어씌워지며 업데이트된다.
답변
- working_directory에서 코드를 작성한다.
- git add 명령어로 작업의 변경사항을 staging_area에 임시로 저장한다.
- git commit으로 변경사항과 메세지를 local_repository에 저장한다.
- git push로 local_repository에서 remote_repository로 업로드한다.
- git pull은 remote_repository에서 최신 변경사항을 먼저 local_repository로 파일을 다운로드하고 이후 이 변경사항을 working_directory에 적용하여 개발자가 작업하는 영역에 코드가 최신상태로 업데이트된다.
- git reset의 세 가지 옵션과 각각의 차이를 설명하기
git reset이란?
이 명령어는 git의 HEAD를 지정된 커밋으로 이동하는 명령어이다.
최근 커밋을 리셋하고 다시 커밋할 때 사용한다.
명령어 문법은 다음과 같다.
git reset --soft HEAD~1
이전 커밋으로 돌아간다.
HEAD~2, HEAD~3, HEAD~4...여러 단계까지 되돌릴 수 있다.
git reset의 옵션
위에서 --soft
라고 적힌 부분이 옵션이다.
옵션은 git의 작업 영역 3가지 중 어디어디에 reset을 적용할 것인지 조절한다.
git reset의 3가지 옵션
- --soft
- --mixed
- --hard
-soft
- 동작
- local repository의 HEAD를 지정된 커밋으로 이동
- 용도
- 작업사항은 유지하고 커밋만 다시 할 때 사용한다.
-mixed
- 동작
- local repository의 HEAD를 지정된 커밋으로 이동
- staging area의 내용을 지정된 커밋의 상태로 되돌림
- 용도
- 기존 작업사항은 유지된 상태에서 git add부터 다시 할 때 사용한다.
-hard
- 동작
- local repository의 HEAD를 지정된 커밋으로 이동
- staging area를 지정된 커밋으로 되돌림
- working directory를 지정된 커밋으로 되돌림
- 용도
- 커밋을 완전히 취소하고 변경 사항도 삭제하여 컴퓨터에 작업 중인 코드까지 전부 지정된 커밋으로 되돌린다.
요약
이미지 출처 : 코드잇 스프린트 강의

답변
- 각 옵션은 작업 영역에 미치는 범위의 차이가 있다.
- --soft는 repository의 HEAD만 이동한다.
- --mixed는 repository의 HEAD 이동 + staging area의 변경사항을 지정된 커밋으로 변경한다.
- --hard는 repository의 HEAD 이동 + staging area의 변경사항을 지정된 커밋으로 변경 + working directory도 지정된 커밋으로 변경한다.