git - 2

2021. 8. 7. 22:41

2장
1)
깃 초기화(깃 저장소 생성): 해당 디렉터리 이동 - git init


2)
깃 구조
 - 작업트리 : 파일 수정, 저장등의 작업을하는 영역. 실제 작업 디렉터리
 - 스테이지 : 스테이징 영역(staging area)이라고 하며, 버전으로 만들 파일들이 대기하는 영역
              작업 트리에서 변경된 파일들을 git 저장소에 반영하기 위해(버전업을 위해) 해당 파일들을 스테이지에 등록하게 된다.
 - 저장소 : 리포지토리(repository)라고 하며, 스테이지에 대기하고 있는 파일을 저장소에 등록하여 버전을 생성한다
  ** 스테이지와 저장소는 .git에 위치해 있다

 - 순서
    파일을 수정한다
    git add로 수정한 파일 정보를 스테이징 영역에 등록한다
    git commit으로 스테이징 영역에 등록된 파일들을 저장소에 반영한다(버전업)

3)
명령어 및 상태
 - git status : 깃 상태 확인
    -> untracked files : 새로 생성되어 깃에서 한번이라도 버전으로 등록되지 않은(관리되지 않은) 파일
    -> changes not staged for commit : 기존에 존재하였으나, 내용이 변경된 파일이며, 스테이징 영역에 등록되지 않은 파일
 - git add : 스테이징 영역에 수정한 파일을 추가(정확히는 변경 정보를 .git/index에 저장하며, 인덱스에 등록한다라고도 함)
    -> git add: 변경된 파일 정보 전체 등록
    ** 윈도우 형식의 파일이면 waning 메세지가 출력된다. 이는 윈도우 형식의 파일은 개행시 CR LF인데, git은 리눅스 기반이기 때문에 개행을 LF로 표현하며, 
       경고 메세지는 git에서 윈도우 형식의 개행을 리눅스 형식의 개행으로 변환해서 등록한다는 의미한다
 - git commit : 변경정보를 기반으로 버전 생성(-m 옵션 사용시 "코멘트" 를 추가하여 변경사항에 대해 한번에 입력이 가능하다)
 - git commit -am : git add와 git commit를 한번에 수행한다(단, 새로 파일을 추가할시 불가, 기존에 추적중인 파일이 수정 사항에 대해서만 가능) 
    ex) git commit -am "hello"
 - git log : 저장소에 저장된 변경내역(버전 변경 내역 히스토리) 출력
    -> commit ~~~ : git hash, commit hash라고 하며, 커밋을 구별하는 아이디
 - gitr log --stat : 각 커밋별 변경된 파일내역을 확인하는 옵션 추가
 - gitr diff : git add 전(스테이징 영역에 변경내역을 등록하기 전) 이전 원본파일과 현재 수정 파일간 변경 내역을 비교하는 명령어

4)
tracked 파일: git에 한번이라도 등록되어 계속 추적중인 파일
              (해당 파일이 변경될 경우, git status 명령어 입력시 changes not staged for commit 항목이 출력된다)
untracked 파일: git에서 한번도 등록되지 않아 버전관리가 되지 않으며, git에서 추적하지 않는 파일
                (git status 명령어 입력시 untracked files 항목이 출력된다)

5)
.gitignore 파일 : git으로 관리하는 디렉터리 안에서 버전관리를 하고 싶지 않은 디렉토리 및 파일이 존재할시 .gitignore 파일을 생성하여 해당 정보를 등록할 수 있다
                  ex) 개인적으로 메모해 놓은 파일, swp파일(임시정보파일), 백업파일 등을 제외할 시 사용

6)
git에 한번이라도 등록하여 추적 중인 상태의 파일(tracked file)을 대상으로 아래와 같이 상태가 변경된다.
unmodified 상태 : 추적중인 파일들이 수정되지 않은 상태
modified 상태 : 파일들이 수정되었으나, 스테이징 영역에 등록되기 전인 상태
staged 상태 : git add 명령을 통해 스테이징 영역에 파일들을 등록한 상태
              (이상태에서 git commit명령을 통해 버전업 시, 파일들은 unmodified 상태로 변경된다.)


7)
git commit --ammend : 가장 최근에 commit한 항목의 코맨트를 수정
                      해당 명령어 실행시 가장 최근의 commit 내용을 수정할 수 있다.

8)
git checkout : 스테이징 영역에 등록되기 전(스테이징 영역에 등록시 사용불가), 수정한 파일의 내용을 이전 원본파일의 내용으로 원복하는 명령어
        ex) git checkout -- aa.txt
git checkout 해시값 : 지정한 커밋 해시로 이동

git reset HEAD : 스테이징 영역에 등록된 파일 정보를 취소하는(내리는) 명령어
    ex) vim aa.txt
        git add *
        git reset HEAD aa.txt
  ** 만약 HEAD 이후 파일을 지정하지 않으면 스테이징 영역에 등록된 전체 파일에 대해 스테이징 영역에서 내리게된다

git reset HEAD^ : 커밋까지 완료된 이후, 가장 마지막에 한 커밋을 취소하는 명령어
                  옵션없이 사용시, 가장 최근의 커밋은 취소되고, 스테이징 영역에 등록된 정보 또한 제거된다.
                  즉, 파일만 수정되어 있는 상태이다(이를 다시 반영하려면 git add로 스테이징 영역에 등록하고 git commit를 통해 다시 커밋해야 된다.

  ** 추가옵션
   --soft HEAD^ : 가장 마지막에 진행한 커밋만을 취소(커밋만 취소, 스테이징 영역에는 등록된 상태)
   --mixed HEAD^ : 기본옵션, 가장 마지막에 진행한 커밋 취소 및 스테이징 영역에 등록된 정보 제거
   --hard HEAD^ : 가장 마지막에 진행한 커밋, 스테이징 영역, 파일수정내역을 전부 제거한다
                  -> 해당 명령어 실행 시, 어느 버전으로 이동했는지 알려주기 위해 이동한 hash값을 출력한다



git reset 해시값 : 커밋까지 완료된 이후, 특정 버전(특정 커밋)으로 되돌리는(이동하는) 명령어
                   단, 명령어 실행 시 이동하는 해시 값 기준에서 이후에 수행한 버전업(커밋) 내용은 제거된다
  ** "git checkout 해시값" 명령어와 동일하게 수행된다

git revert 해시값 : 커밋까지 완료된 이후, 특정 버전(특정 커밋)을 취소(제거가 아님)하는 명령어
                    즉, 현재 커밋 내용에서 '해시값으로 입력한 커밋에서 수행한 내용'을 원복(취소)하되, 해당 해시값의 커밋내용을 삭제하지 않고 남겨둔다. 
                    그리고 제거된 내용에 대한 코멘트를 입력하고 커밋하게된다(새로 커밋하는 과정과 비슷하다고 할 수 있다)

                    단, 가장 마지막에 진행한 커밋을 revert할시에는 문제가 없지만 그 이전의 커밋 내역을 revert시 관련 처리가 필요하다(이는 branch 학습에서 알려줄듯)

'Study > git' 카테고리의 다른 글

git- 5  (0) 2021.08.08
git - 4  (0) 2021.08.08
git - 3  (0) 2021.08.08
git - 1  (0) 2021.08.07
시작  (0) 2021.08.06

+ Recent posts