본문 바로가기

git/github

[git] progit 재독하며 몰랐던것 정리

처음 git을 접한 후 개인프로젝트에만 사용을 하면서 항상 쓰게되는 명령어만 사용하다가 

쿠팡에 온 후 애자일팀의 소스관리를 git으로 하게 되면서 혼자 쓰던것보다는 좀 더 많은 명령어를 사용하게 되었다.

몇권의 책도 읽고 했었지만 거의 사용하지 않았던 명령어가 대부분이었는데 최근 몇개월 git을 본격적으로 쓰면서 다시 pro git 책을 읽기로 마음을 먹었다.


사용하면서 "있었으면 좋겠는데.." 했던 기능들..하지만 내가 모르고 있는.. 그런 기능들도 다시 한번 찾아보고 싶고..

경험상 분명히 이해도가 예전과는 다를것이라서..


그래서 책을 재독하면서 그러한 내용들을 추가로 정리해보기로...


1. git add [directory] 하면 디렉터리 아래에 있는 모든 파일이 재귀적으로 추가된다.

 - 평소에는 git add . 만 거의 사용..


2. tracked 상태의 파일을 수정 후 git add [filename]을 하면, 그 파일은 staged 상태가된다.

여기서 다시 그 파일을 수정하면 그 파일은 staged이면서 unstaged상태가 된다.

이 상태에서 commit하게 되면 처음 수정하여 staged되었던 내용만 commit이 된다.


3. gitignore에서 디렉터리는 슬래시를 끝에 사용하는 것으로 표현


4. git diff는 워킹디렉토리 - staging area, git diff --staged는 commit - staging area

- 수정한 파일이 모두 staging area에 들어가 있다면 git diff는 아무것도 보여주지 않는다.


5. 그냥 파일을 삭제하면 unstaged상태, git rm 으로 삭제하면 staged 상태


6. git rm --cached [filename]은 staging area에서만 파일을 제거하고, 실제 워킹 디렉터리의 파일은 삭제하지 않는다. (.gitignore 파일에 추가하는 것을 빼먹었거나 했을 때 유용함)


7. git mv [sourcefile] [targetfile]은 아래의 명령어를 차례로 실행한것과 동일

- mv sourcefile targetfile

- git rm sourcefile

- git add targetfile


8. git log -p -2

-  최근 2개의 커밋히스토리와 각 커밋의 diff 결과를 확인


9. git log --pretty=format:"%h - %an, %ar : %s"

- format의 예제


10. git log --since-2.weeks

- 지난 2주동안의 커밋 히스토리 조회


11. 커밋의 수정은 git commit --amend

- staging area를 사용해서 commit하기 때문에, 마지막 커밋 후 수정한 것이 아무것도 없다면 커밋 메시지만 수정하게된다.

- 커밋 후 빠트린 파일이 있다면 아래의 명령어로..

 1) git commit -m 'init'

 2) git add forgotten_file

 3) git commit --amend


12. 예전 commit에 대해서 tagging하기

 - git tag -a [tagname] [commit hash]


13. alias 설정

- git config --global alias.co checkout


14. HEAD

 - 지금 작업하는 로컬 브랜치를 가리키는 포인터

 - git checkout [branch]로 현재 브랜치로 이동하면, HEAD로 옮겨진 branch를 가리킨다.


15. Fast forward

 - A브랜치에서 다른 B브랜치를 Merge할때 B가 A 이후의 커밋을 가리키고 있으면 A가 B의 커밋을 가리키도록 하는데 이러한 방식을 이야기함


16. git branch -v

 - 브랜치 리스트와 마지막 커밋 메시지를 보여줌


17. git push origin serverfix:serverfix

 - 로컬 브랜치와 리모트 브랜치 이름이 다를때 유용


18. fetch 후 리모트 브랜치에서 시작하는 새 브랜치 만들기

 - git checkout -b [local-branchname] [origin/remote-branchname]

혹은

- git checkout --track [origin/remote-branchname]


19. 공백문자 체크

 - git diff --check

 - 잘못된 공백문자를 'X'로 표시


20. 커밋은 논리적으로 구분하는 Changeset이다. 여러 가지 이슈에 대한 수정사항을 하나의 커밋에 담지 말자.


21. 커밋메시지는 첫 줄에 50자가 넘지 않는 간략한 요약정보. 그리고 한 줄을 비우고 그다음 줄부터 커밋에 대한 자세한 설명을 적는 가이드라인이 있음


22. 작업한 내용을 프로젝트의 공유 저장소에 push하고자 할 때에는 우선 origin/master 브랜치를 fetch하고 Merge한다. (git merge origin/master)


23. git show HEAD^ (HEAD의 부모 커밋)


24. git log origin/master..HEAD

 - origin 저장소의 master 브랜치에는 없고 현재 checkout중인 브랜치에만 있는 커밋보기


25, Stash가 적용된 브랜치 만들기

 - git stash branch [branchname]


26. 아래 3개는 모두 같음

 - git log origin/master

 - git log remotes/origin/master

 - git log refs/remotes/origin/master