Dev Ops/Git Git 사용법 II
  • 728x90
    반응형



    Git 사용법





    Staged 와 Unstaged 상태의 변경 내용을 보기



    git 저장소에 위치한 README.txt 파일을 수정하고  git diff  명령을 실행하면 수정했지만 아직 staged 상태가 아닌 파일을 비교해 볼 수 있다.





    이 명령은 워킹 디렉토리에 있는 것과 Staging Aread 에 있는 것을 비교한다. 


    그래서 수정하고 아직 Stage하지 않은 것을 보여준다.


    커밋하려고 Staging Area에 넣은 파일의 변경 부분을 보고 싶으면  git diff --staged  옵션을 사용한다.





     git diff  명령은 마지막으로 커밋한 후에 수정한 것들 전부를 보여주지 않는다. 

     git diff  는 Unstaged 상태인 것들만 보여준다.


    Staged 상태인 파일은  git diff --cached  옵션으로 확인한다.  --staged  와  --cached  는 같은 옵션이다.


    ※  git diff  대신  git difftool  명령을 사용해서 emerge, vimdiff 같은 도구로 비교할 수 있다. 상용 제품도 사용할 수 있다.

     git difftool --tool-help  라는 명령은 사용가능한 도구를 보여준다.



    변경사항 커밋하기



    Git는 생성하거나 수정하고 나서  git add  명령으로 추가하지 않은 파일은 커밋하지 않는다. 그 파일은 여전히 Modified 상태로 남아있다. 


    커밋하기 전에  git status  명령으로 모든 것이 staged 상태인지 확인할 수 있다. 


    그 후에  git commit  을 실행하여 커밋한다.


    $ git commit 


    Git 설정에 지정된 편집기가 실행되고, 아래와 같은 텍스트가 자동으로 포함된다. (아래 예제는 Vim 편집기의 화면이다.


    이 편집기는 쉘의 $EDITOR 환경변수에 등록된 편집기이고 보통은 Vim이나 Emacs를 사용한다.


     git config --global core.editor  명령으로 어떤 편집기를 사용할지 설정할 수 있다.



    자동으로 생성되는 커밋 메시지의 첫 라인은 비어 있고 둘째 라인부터  git status  명령의 결과가 채워진다.


    커밋한 내용을 쉽게 기억할 수 있도록 이 메시지를 포함할 수도 있고 메시지를 전부 지우고 새로 작성 할 수 있다.


     git commit  에 -v 옵션을 추가하면 편집기에 diff 메시지도 추가된다.


    내용을 저장하고 편집기를 종료하면 Git는 입력된 내용으로 새 커밋을 완성한다.


    메시지를 인라인으로 첨부할 수도 있다. commit 명령을 실행할 때 아래와 같이 -m 옵션을 사용한다.



    commit 명령은 몇 가지 정보를 출력하는데 위 예제는 (master) 브랜치에 커밋했고 체크섬은 (17e669b) 라고 알려준다. 


    그리고 수정한 파일이 몇개이고 삭제됐거나 추가된 라인이 몇 라인인지 알려준다.


    커밋할 때마다 프로젝트의 스냅샷을 기록하기 때문에 나중에 스냡샷끼리 비교하거나 예전 스냅샷으로 되돌릴 수 있다.



    Staging Area 생략하기



     git commit  명령을 실행할 때 -a 옵션을 추가하면 Git는 Tracked 상태의 파일을 자동으로 Staging Area에 넣는다.


    그래서  git add  명령을 실행하는 수고를 덜 수 있다.



    편리한 옵션이긴 하지만 주의 깊게 사용해야 한다. 추가하지 말아야 할 변경사항도 추가될 수 있기 때문이다.



    파일 삭제하기



    Git에서 파일을 제거하려면  git rm  명령으로 Tracked 상태의 파일을 삭제한 후에(정확하게는 Staging Area에서 삭제) 커밋해야 한다. 


    이 명령은 워킹 디렉토리에 있는 파일도 삭제하기 때문에 실제로 파일도 지워진다.


    Git 명령을 사용하지 않고 단순히 워킹 디렉터리에서 파일을 삭제하고 git status 명령으로 상태를 확인하면


    Git는 현재 "Changes not staged for commit"(즉, Unstaged 상태)라고 표시해준다.



    그리고  git rm  명령을 실행하면 삭제한 파일은 Staged 상태가 된다.



    커밋하면 파일은 삭제되고 Git는 이 파일을 더이상 추적하지 않는다. 이미 파일을 수정했거나 Index에 추가했다면 -f 옵션으로 강제 삭제해야 한다.


    이 점은 실수로 데이터를 삭제하지 못하도록 하는 안전장치다. 


    커밋 하지 않고 수정한 데이터는 Git로 복구할 수 없기 때문이다.


    Staging Area에서만 제거하고 워킹 디렉토리에 있는 파일은 지우지 않고 남겨둘 수 있다. 


    하드디스크에 있는 파일은 그대로 두고 Git만 추적하지 않게 한다.


     --cached  옵션을 사용하여 명령을 실행한다.


    $ git rm --chched README.txt 


    여러 개의 파일이나 디렉토리를 한꺼번에 삭제할 수도 있다. 아래와 같이  git rm  명령에 file-glob 패턴을 사용한다.


    $ git rm log/\*.log


     *  앞에  을 사용한 것은 파일명 확장 기능은 쉘에만 있는 것이 아니라 Git 자체에도 있기 때문에 필요하다.


    이 명령은  log/  디렉토리에 있는  .log  파일을 모두 삭제한다.


    $ git rm \*~ 


    이 명령은  로 끝나는 파일을 모두 삭제한다.



    파일 이름 변경하기



    Git는 다른 VCS 시스템과는 달리 파일 이름의 변경이나 파일의 이동을 명시적으로 관리하지 않는다.


    다시 말해 파일 이름이 변경됐다는 별도의 정보를 저장하지 않는다.


    $ git  mv file_from file_to



     git mv  명령은 아래 명령어를 수해한 것과 똑같다.


    $ mv README.text README

    git rm README.txt

    git add READMEgi$gi 


    단지  git mv  명령은 편리하게 명령을 세 번 실행해주는 것 뿐이다. 


    중요한 것은 이름을 변경하고 나서 rm/add 명령을 실행해야 한다는 사실이다.



    커밋 히스토리 조회하기



    특별한 아규먼트 없이  git log  명령을 실행하면 저장소의 커밋 히스토리를 시간순으로 보여준다. 


    즉, 가장 최근의 커밋이 가장 먼저 나온다.


    그리고 이어서 각 커밋의 SHA-1 체크섬, 저자 이름, 저자 이메일, 커밋한 날짜, 커밋 메시지를 보여준다.



     -p  옵션은 각 커밋의 diff 결과를 보여준다.


    다른 유용한 옵션으로 -2 가 있는데 최근 두개의 결과만 보여주는 옵션이다.



    이 옵션은 직접 diff를 실행한 것과 같은 결과를 출력하기 때문에 동료가 무엇을 커밋했는지 리뷰하고 빨리 조회하는데 유용하다.


     git log  명령에는 히스토리의 통계를 보여주는 옵션도 있다.


     --stat  옵션으로 각 커밋의 통계 정보를 조회할 수 있다.



    이 결과에서  --stat  옵션은 어떤 파일이 수정됐는지, 얼마나 많은 파일이 변경됐는지, 


    또 얼마나 많은 라인을 추가하거나 삭제했는지 보여준다. 요약정보는 가장 뒤쪽에 보여준다.


     --pretty  이 옵션을 통해 히스토리 내용을 보여줄 때 기본 형식 이외에 여러가지 중에 하나를 선택할 수 있다.


     oneline  옵션은 각 커밋을 한 라인으로 보여준다. 이 옵션은 많은 커밋을 한 번에 조회할때 유용하다.


    추가로  short  full  fuller  옵션들은 정보를 조금식 가감해서 보여준다.



     format  이 옵션은 나만의 포맷으로 결과를 출력하고 싶을 때 사용한다. 


    특히 결과를 다른 프로그램으로 파싱하고자 할 때 유용하다.


    이 옵션을 사용하면 포맷을 정확하게 일치시킬 수 있기 때문에 Git를 새 버전으로 바꿔도 결과 포맷이 바뀌지 않는다.



     git log --pretty=format  에 쓰이는 옵션


    옵션 

    설명 

    %H

    커밋 해시

    %h

    짧은 길이 커밋 해시 

    %T

    트리 해시 

    %t

    짧은 길이 트리 해시 

    %P

    부모해시

    %p

    짧은 길이 부모 해시

    %an

    저자 이름

    %ae

    저자 메일

    %ad

    저자 시각( 형식은 -date= 옵션 참고) 

    %ar

    저자 상대적 시각

    %cn

    커미터 이름

    %ce

    커미터 메일 

    %cd

    커미터 시각 

    %cr

    커미터 상대적 시각

    %s

    요약 


     oneline  옵션과  format  옵션은  --graph  옵션과 함께 사용할때 유용하다.


    이 명령은 브랜치와 머지 히스토리를 보여주는 아스키 그래프를 출력한다.



    git log 주요 옵션


    옵션

    설명

    -p

    각 커밋에 적용된 패치를 보여준다. 

    --stat

    각 커밋에서 수정된 파일의 통계정보를 보여준다.

    --shortstat

    --stat 명령의 결과 중에서 수정한 파일, 추가된 라인, 삭제된 라인만 보여준다. 

    --name-only

    커밋 정보중에서 수정된 파일의 목록만 보여준다.

    --name-status

    수정된 파일의 목록을 보여줄 뿐만 아니라 파일을 추가한 것인지, 수정한 것인지, 

    삭제한 것인지도 보여준다.

    --abbrev-commit

    40자 짜리 SHA-1 체크섬을 전부 보여주는 것이 아니라 처음 몇 자만 보여준다.

    --relative-date

    정확한 시간을 보여주는 것이 아니라 '2 weeks  ago' 처럼 상대적인 형식으로 

    보여준다.

    --graph

    브랜치와 머지 히스토리 정보까지 아스키 그래프로 보여준다.

    --pretty

    지정한 형식으로 보여준다. 이 옵션에는 oneline, short, full, fuller, format 이 있다.

    format은 원하는 형식으로 출력하고자 할 때 사용한다. 



    조회 제한조건



    최근 두개만 조회하는 -2 옵션의 실제 사용법은 -<n> 이고 n은 최근 n개의 커밋을 의미한다.


    지난 2주 동안 만들어진 커밋들만 조회하는 명령은 아래와 같다.


    $ git log --since=2.weeks 


    이 옵션은 다양한 형식을 지원한다.  "2018-06-19"  같이 정확한 날짜도 사용할 수 있고,


     "2 years 1 day 3minutes ago"  같이 상대적인 기간을 사용할 수도 있다.


     --author  옵션으로 저자를 지정하여  검색할 수도 있고  --grep  옵션으로 커밋 메시지에서 키워드를 검색할 수도 있다.


    (author와 grep 옵션을 함께 사용하여 모두 만족하는 커밋을 찾으려면  --all-match  옵션도 함께 사용해야 한다.)


     -S  이 옵션은 코드에서 추가되거나 제거된 내용 중에 특정 텍스트가 포함되어 있는지를 검색한다.


    예를 들어 특정 함수가 추가되거나 제거된 커밋만을 찾아보려면 아래와 같은 명령을 사용한다.


    $ git log --Sfunction_name 


    디렉토리나 파일 이름을 사용하여 그 파일이 변경된 log의 결과를 검색할 수 있다.


    $ git log -- path1 path2


    git log 조회 범위를 제한하는 옵션


    옵션 

    설명 

    -(n)

    최근 n 개의 커밋만 조회한다. 

    --since, --after

    명시한 날짜 이후의 커밋만 검색한다.

    --until, --before

    명시한 날짜 이전의 커밋만 조회한다.

    --author

    입력한 저자의 커밋만 보여준다.

    --committer

    입력한 커미터의 커밋만 보여준다.

    --grep

    커밋 메시지 안의 텍스트를 검색한다. 

    -S

    커밋 변경(추가/삭제) 내용 안의 텍스트를 검색한다. 









    728x90
    반응형
상단으로