기본 콘텐츠로 건너뛰기

라벨이 git인 게시물 표시

[git] --ammend를 이용 한 커밋 메시지 수정 + emacs 명령어

점심 시간을 이용한 깃 명령어 정리 $ git commit --ammend 위 명령어를 통하여 최신 커밋 내역 메시지를 수정을 할 수 있다. 근데 위 명령어를 통해 커밋 메시지를 수정을 하려고 할 경우 빔으로 열리지 않고 emacs로 열리는 현상이 있는데 아래 명령어에서 C는 ctrl키를 의미한다. 1. 파일열기.   파일 여는 방법은 vim과 같다   emacs [file name] 2. 저장하기.    C+x, C+s. : ctrl+x을 누르고 ctrl+s을 누르라는 의미.  3. 종료.    C+x, C+c.  4. 마크 설정.    마크 설정을 시작하고 싶은 부분을 커서를 이동시킨 후, C+space.을 치면 “Mark set” 이라고 emacs의 하단에 나옵니다. 그 후 커서를 마커 설정을 끝내고 싶은 곳까지 이동.  5. 잘라내기.    마크 설정 후 C+w.  6. 붙이기.    C+y.  5. 한줄 지우기.    C+k. 커서 뒤에 있는 한 줄이 모두 지워지며, 지워지고, 지워진 문자는 clipboard에 저장된다.  6. 커서 이동.    C+a. 커서를 줄의 맨 앞으로 이동. C+e. 커서를 줄의 맨 뒤로 이동. C+n. 커서를 한 줄 아래도 이동.  7. 문자열 검색과 치환.   C+s 찾을 문자열. 커서의 아랫부분에서 찾을 문자열을 검색한다. C을 누른 상태에서 s 을 누를 때마다 다음 문자열로 이동한다. C+r 찾을 문자열. 커서의 윗부분에서 찾을 문자열을 검색한다. C을 누른 상태에서 s 을 누를 때마다 이전 문자열로 이동한다. 문자열 치환. ESC, %, “치환될 문자열”, “치환할 문자...

[git] diff를 이용하여 변경된 소스 확인하기, reset을 이용하여 head변경

git에서 diff를 이용하여 소스의 변경을 확인할 수 있다. 머 사실 git diff --cached랑 --staged만 쓰는데 둘다 결과가 똑같아서 무슨 차이인가 하고 검색 하다가 다른 옵션이 있길래 정리를 해본다. 결과론 적으로 --cached랑 --staged는 같은 기능임. $ git diff HEAD # Shows what has changed since the last commit . $ git diff HEAD ^ # Shows what has changed since the commit before the latest commit . $ git diff -- cached # Show what has been added to the index via git add but not yet committed . $ git diff # Show what has changed but hasn't been added to the index yet via git add . Working Directory < -- -- + -- -- -- -- + -- -- -- - + | | | | | diff HEAD | | V | | | "git add" | | | | | | diff | | | | V | | | Index < -- -- + -- -- - | -- -- -- --...

[git] stash명령을 통해 쓸데없는 커밋 방지하기

git에서는 특정 브랜치를에서 작업 중 갑자기 타 브랜치로 옮겨야 하는 경우가 종종 있다(자주 있는거 같기도 하다) 이럴 때 stash를 사용하지 않는다면 커밋을 하고 타 브랜치로 옮겨야 한다.  이때 만약 커밋을 할 타이밍이 아니라면 쓸데없이 커밋 로그가 한줄 쌓일 것이다. 이러한 것이 쌓이다보면 커밋을 보기가 싫어진다. 이럴때 stash를 이용하면 쓸데없는 커밋을 남기지 않고도 타 브랜치를 움직일 수 있다. $ git checkout -b test # test branch 생성 $ vim test.py # test.py파일 생성 '''코드수정''' :wq $ git status On branch test Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: test Untracked files: (use "git add ..." to include in what will be committed) test.py no changes added to commit (use "git add" and/or "git commit -a") (/Users/bagjeongtae/anaconda) bagjeongtaeui-MacBook-Pro:git_test bagjeongtae$ 파일을 추가를 하거나 수정을 하고나서 status 명령을 통해 어떤 파일이 생성, 갱신, 삭제가 되었느지 알 수 있다. 문제는 이러한 상태에서는 checkout, pull을 수행 할 수가 없게된다. 위와같은 상태에서 commit이나...

[git] hook을 이용하여 코드 스타일 검사 - pep8 검증

pep을 사용해서 매번 검사를 하는건 꽤나 귀찮은 일입니다. 이러한 검사 과정을 특정 행위를 하기 이전에 먼저 수행함으로써 귀찮음을 해결 할 수 있습니다. git hook의 pre-commit을 이용하여 커밋이 되기 이전에 pep 검사를 수행 후 결과에 따라 커밋 결정 유무를 판단을 해보도록 하는 hook을 만들어 보갰습니다. $ git status On branch master Your branch is ahead of 'origin/master' by 1 commit. (use "git push" to publish your local commits) Changes to be committed: (use "git reset HEAD ..." to unstage) new file: .app.py.swp new file: app.py new file: app2.py 커밋 대상의 파일을 보실 수 있습니다. status를 통해 app.py, app2.py가 add되어 cache되었음을 알 수 있습니다. 어떤 코드가 cache되었는지 확인을 하기 위해서는 diff의 명령어를 사용하면 됩니다. $ git diff --stahed 또는 git diff --cached # 같은 결과입니다. diff --git a/.app.py.swp b/.app.py.swp new file mode 100644 index 0000000..6cf6386 Binary files /dev/null and b/.app.py.swp differ diff --git a/app.py b/app.py new file mode 100644 index 0000000..aa07c85 --- /dev/null +++ b/app.py @@ -0,0 +1,41 @@ +''' +2017.03.04 +''' +import requests + +class a_te...

[git] git hooks(훅)

git에서도 hook을 추가 할 수 있습니다. 프로그래밍에서 hook이란 특정 이벤트 또는 함수가 호출 되기 전,후에 호출이 되는 코드를 말합니다. git에서의 이벤츠는 커밋, 풀, 머지 등과 같은 작업으로부터 특정 스크립트를 실행을 시킬 수 있습니다. (해당 스크립트는 perl, python등과 같은 스크립트 언어로 작성이 가능 합니다.) git은 크게 local과 remote두가지로 나눌 수 있늗데 hooks또란 이 두가지경우 모든 설정을 각각 해 줄 수 있습니다. git과 연동된 프로젝트에서 .git이라는 디렉토리를 확인 할 수 있습니다. $ ls -ahl . .. .git 해당 디렉토리는 숨긴상태로 뜨기 때문에 -ahl이라는 옵션을 추가 해 줍니다. 윈도우의 경우 디렉토리 옵션에 들어가서 숨긴 폴더표시를 눌러주시면 됩니다. $ cd .git $ ls applypatch-msg.sample pre-push.sample commit-msg.sample pre-rebase.sample post-update.sample pre-receive.sample pre-applypatch.sample prepare-commit-msg.sample pre-commit.sample update.sample .git/hooks 아래에 .sample로 이미 만들어진 hooks파일이 존재합니다. 해당 훅을 사용하기 위해서는 .sample을 지워주기만 하면 됩니다. 클라이언트 훅 1.  커밋 훅 commit훅은 pre-commit, prepare-commit-msg, commit-msg, post-commit 4가지가 존재합니다. pre-commit : 커밋할 때 가장먼저 호출되는 훅입니다. 커밋 메시지를 작성하기 전에 호출이 됩니다. 이 훅에서  커밋하는 스냅샷을 검사를 합니다. 빠트린 것이 없는지, 테스트 유무를 점검을 하게 ...

[git] git log 확인하기

git log를 통해서 커밋 이력과 해당 커밋에서 어떤 작업이 있었는지에 대해 조회를 할 수 있다. 우선 git에서의 주요 명령어부터 알아보겠다. $ git push [branch name] $ git pull [branch name] 여기서 branch name은 로컬일 경우 해당 브런치 이름만 적으면 되지만 깃허브 원격 저장소로 연결을 원할 경우는 해당 브런치 이름 앞에 꼭 origin을 붙이도록 한다. $ git brnch [branch name] $ git checkout [branch name] branch일경우 해당 브런치를 생성을 한다. 여기서 현재의 브런치를 기준으로 브런치를 따는것이다. checkout은 브런치를 바꾸는 것이다.(HEAD~[숫자]를 이용하면 해당 커밋으로 움직일수 있다.. 아니면 해당 커밋 번호를 통해 직접 옮기는것도 가능하다.) -> 해당 커밋으로 옮기는 것일뿐 실질적으로 바뀌는 것은 없다. 해당 커밋으로 완전히 되돌리려면 reset이라는 명령어를 써야한다. 처음 checkout을 쓰면 매우 신기하게 느껴진다. 막 폴더가 생겼다가 지워졌다가 ㅋㅋㅋㅋㅋ  master 브런치에서는 ht.html파일이 존재하지만 a브런치에서는 존재하지않는다. checkout 으로 변경을 하면 D 로 명시를 해준다.  $ git log 해당 브런치의 커밋 내역을 보여준다. a 브런치의 커밋 내역들이다. (머지 테스트를 하느라 커밋 내용이 거의 비슷하다 ㅋㅋ) master 브런치의 커밋 내역들이다. 커밋 번호, 사용자, 날짜, 내용순으로 등장을 한다. 이건 단순히 지금까지의 내역을 훑어보기 좋다. 좀더 세밀한 내용을 봐보자. $ git log --stat --stat을 붙이면 기존의 로그에서 간략하게...