Git Basic Command

nhs312
0

Git 기본 명령어

git을 사용하는데 있어 GUI tool도 있지만 command line을 사용할 때 필요한 기본 명령어를 정리해본다. 모든 명령어 앞에는 git을 붙이는게 공통이다.

Commit & Log 관련


COMMIT


commit
  vim이 열리고 첫줄은 비어있고 아래 메세지가 자동완성 되어있음. 메세지를 입력하고 저장하면 commit 완료.

commit -m "메세지"
  메세지를 인라인 형식으로 담아서 commit.

commit -a
  수정, 추가된 파일들의 add 과정을 생략하고 바로 commit.


RM


rm filename
   git에서 파일을 삭제하려면 rm명령으로 tracked상태의 파일을 삭제 후 commit. rm을 날리면 정확히는 staging area의 파일도 삭제.

rm --cached filename
  파일을 삭제하고 이 파일은 git이 더이상 tracked하지 않는다. 즉 staging area에서는 제거하고 working directory에서는 남겨둔다.

rm log/\*.log
  log 디렉토리에 있는 .log 파일을 모두 삭제.

rm \*~
  ~로 끝나는 파일을 모두 삭제.


mv prev-name new-name 
  파일명 변경. git은 이 내용을 다 추적하고 있다. 실제로는 rm 이전파일명, add 새 파일명 을 한 것의 단축명령이 mv.


LOG


log
  commit history를 시간 순으로 보여줌.

log -p
  commit의 diff 결과도 보여줌. -2를 붙이면 최근 2개의 결과를 보여줌.

log --stat
  어떤 파일이 얼마나 많이 변경되었는지에 대한 정보를 보여줌.

log --pretty=[oneline|short|full|fuller]
  가장 많이 사용하는 옵션은 oneline. 한줄로 보여준다.

log --pretty=format:"%h - %an, %ar : %s"
  format옵션을 사용해서 결과를 마음대로 볼 수 있다.

options
%H - Commit hash
%h - Abbreviated commit hash
%T - Tree hash
%t - Abbreviated tree hash
%P - Parent hashes
%p - Abbreviated parent hashes
%an - Author name
%ae - Author e-mail
%ad - Author date (format respects the date=
option)
%ar - Author date, relative
%cn - Committer name
%ce - Committer email
%cd - Committer date
%cr - Committer date, relative
%s - Subject

* 참고로 author는 원래 작업을 수행한 사람이고 commiter는 마지막으로 이 작업을 적용한 사람이다. 내가 소스를 수정하고 patch를 보냈고 소스 관리 담당자가 patch를 적용하는 경우를 생각하면 쉽다.

log --pretty=oneline --graph : format이나 oneline 옵션은 graph와 함께 하면 더 간결하게 볼 수 있음.

그 외 options.
-p 각 커밋에 적용된 패치를 보여준다.
--word-diff diff 결과를 단어 단위로 보여준다.
--stat 각 커밋에서 수정된 파일의 통계정보를 보여준다.
--shortstat `--stat` 명령의 결과 중에서 수정한 파일, 추가된 줄, 삭제된 줄만 보여준다.
--name-only 커밋 정보중에서 수정된 파일의 목록만 보여준다.
--name-status 수정된 파일의 목록을 보여줄 뿐만 아니라 파일을 추가한 것인지, 수정한 것인지, 삭
제한 것인지도 보여준다.
--abbrev-commit 40자 짜리 SHA-1 체크섬을 전부 보여주는 것이 아니라 처음 몇 자만 보여준다.
--relative-date 정확한 시간을 보여주는 것이 아니라 `2 주전`처럼 상대적인 형식으로 보여준다.
--graph 브랜치와 머지 히스토리 정보까지 아스키 그래프로 보여준다.
--pretty 지정한 형식으로 보여준다. 이 옵션에는 oneline, short, full, fuller, format이 있
다. format은 원하는 형식으로 출력하고자 할 때 사용한다.
--oneline : --pretty=oneline --abbrev-commit` 옵션을 함께 사용한 것과 동일하다.

log condition set

log --since=2.hours
  2시간 이전 부터의 commit만 보여준다.
관련 options.
-(n) 최근 n 개의 커밋만 조회한다.
--since, --after 명시한 날짜 이후의 커밋만 검색한다.
--until, --before 명시한 날짜 이전의 커밋만 조회한다.
--author 입력한 저자의 커밋만 보여준다.
--committer 입력한 커미터의 커밋만 보여준다.

git log --since=2015-06-16 와 같이 정확한 날짜를 입력할 수도 있다.
물론 --grep도 가능.

git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/

위 명령어로는 포맷을 지정해주고, 저자를 지정해주고, 날짜를 입력해서 머지커밋이 아닌걸 조회한 샘플.


Undo & Modify


COMMIT


commit --amend 
쉽게 말해서 바로 이전 commit을 다시 commit 하는 행위.
$git commit -m "hello"
$git add abc.txt
$git commit --amend
만약 위와같이 명령어를 치면 이전 커밋에 abc.txt 파일을 포함해서 이전 "hello" 커밋을 다시 하게 된다. commit message는 수정이 가능하다.

reset HEAD filename
  staging area의 파일을 unstaged 상태로 변경해준다.
  e.g. git add . 를 통해서 파일 두개를 모두 staging area에 추가한 상태.
changes to be committed:
     modified: abc.txt
     modified: def.txt

이 상태에서 git reset HEAD abc.txt 명령어를 입력한다면
changes to be commited:
     modified: def.txt
changes not staged for commit:
     modified: abc.txt
이렇게 unstaged가 된다.

중요한점은. git으로 commit한 것들은 언제나 되돌릴 수 있지만 commit하지 않은 것들은 절대 되돌릴 수 없다는 점.



Remote Repository



remote -v
  remote repository 를 주소와 함께 볼수있음.

remote add [name] [url]
  url에 해당하는 repository를 name이라는 이름으로 추가한다.

remote rename [prev-name] [new-name]
  remote repo 이름 변경.

remote rm [name]
  remote repo 제거.

위와 같이 remote repo를 추가하고 나면 name으로 사용 가능하다.
e.g. fetch name : 이러면 name 에 해당하는 remote repo에서 fetch를 수행.

fetch [remote-name]
  remote repository의 데이터를 모두 가져온다. 이 후에는 remote의 모든 브랜치를 로컬에서 접근가능하다. 참고로 remote repo는 클론 받을 때 자동으로 origin이란 이름으로 추가된다.

pull
  fetch 후에 현재 작업 중인 branch에 머지까지 한다. fetch + merge.

push [remote-name] [branch-name]
  remote의 branch에 push한다.

remote show origin
  origin의 정보를 보여준다. pull, fetch를 하면 어떤걸 가져오게 되는지에 대한 것도 보여준다.






Tags:

댓글 쓰기

0댓글

댓글 쓰기 (0)