Git 파일 커밋하기 : $ git commit
- Unstaged 상태의 파일은 커밋되지 않는다 (= $ git add 명령으로 추가하지 않은 파일은 커밋되지 않는다.)
- 명령어 실행하면 Git 설정에 지정된 편집기가 실행되고, 아래 ex 와 같은 텍스트가 자동으로 포함된다
이후, 내용을 저장하고 편집기를 종료하면 입력된 내용(#로 시작하는 내용을 제외한)으로 새 커밋을 하나 완성한다.
- commit명령어 실행 후 몇 가지 정보를 출력하는데 커밋한 브랜치, 체크섬값, 수정 파일 갯수, 삭제or추가 라인 등을 알려준다.
$ git commit -a -m 'added new benchmarks' [master 83e38c7] added new benchmarks 1 file changed, 5 insertions(+), 0 deletions(-) |
- ex) $ git commit 명령어로 커밋
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Your branch is up-to-date with 'origin/master'.
#
# Changes to be committed:
# new file: README
# modified: CONTRIBUTING.md
#
~
~
~
".git/COMMIT_EDITMSG" 9L, 283C
ㄴ> line5: 자동으로 생성되는 커밋 메시지의 첫 라인은 비어 있다.
ㄴ> line6~ : 둘째 라인부터 git status 명령의 결과가 채워진다.
ㄴ> 커밋한 내용을 쉽게 기억할 수 있도록 이 메시지를 포함할 수도 있고, 메시지를 전부 지우고 새로 작성할 수 있다
- '-v' 옵션 : 편집기에 diff 메시지도 추가
$ git commit -v |
ㄴ> 정확히 뭘 수정했는지 보여줄 수 있다
- '-m' 옵션 : 커밋 메시지를 인라인으로(=명령에 같이 써서) 첨부
$ git commit -m |
ㄴ> ex▼)
$ git commit -m "Story 182: Fix benchmarks for speed"
[master 463dc4f] Story 182: Fix benchmarks for speed
2 files changed, 2 insertions(+)
create mode 100644 README
ㄴ> 위 예제는 (master) 브랜치에 커밋했고, 체크섬은 (463dc4f), 수정한 파일이 2개이고,
삭제된 라인 없음, 추가된 라인이 2 개임을 알려준다.
- '-a' 옵션 : Staging Area 추가 과정 생략하고 커밋하기
$ git commit -a |
ㄴ> Tracked 상태의 모든 파일을 자동으로 Staging Area에 넣고 커밋까지 진행한다.
ㄴ> ※ 주의 : 편리한 옵션이긴 하지만 주의 깊게 사용
ㄴ> ex▼)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: CONTRIBUTING.md
no changes added to commit (use "git add" and/or "git commit -a")
$ git commit -a -m 'added new benchmarks'
[master 83e38c7] added new benchmarks
1 file changed, 5 insertions(+), 0 deletions(-)
ㄴ> 위 예제는 (master) 브랜치에 커밋했고, 체크섬은 (83e38c7), 수정한 파일이 1개이고,
삭제된 라인 0개, 추가된 라인이 5개임을 알려준다.
Git 파일 삭제하기 : $ git rm
- 옵션없이 사용 시 커밋된 파일을 삭제상태('deleted')로 Staging Area에 추가한다. (커밋파일 -> 삭제상태로 스테이징하는 거)
- 이 명령어를 통해 삭제상태가 된 Staged파일을 커밋하면 파일은 완전히 삭제되어 Git은 이 파일을 더는 추적하지 않는다.
Tracked 상태의 파일을 삭제한 후 (정확하게는 Staging Area에서 삭제하는 것) 커밋해야 한다.
- ※ 주의 : Working directory에 있는 파일도 삭제하므로 실제로 파일도 지워진다.
- Ex ▼)
$ git rm PROJECTS.md
rm 'PROJECTS.md'
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD ..." to unstage)
deleted: PROJECTS.md
- '-f' 옵션 : 파일 강제 삭제 (이미 파일을 수정했거나 Staging Area에 추가했다면)
$ git rm -f |
ㄴ> 사용 ) ⓐ Git Repository에 있는 파일을 Working directory에서 수정한 상태의 파일 (=Modified),
ⓑ Git Repository에 있는 파일을 수정 후 Staging Area에 추가한 상태의 파일 (=Staged),
ⓒ Git Repository에 커밋되지 않고 Staging Area에만 추가된 파일(=Staged)을 삭제하고자 하는 경우 사용한다.
ㄴ> ※ 주의 : 단순히 Working directory에서 파일을 삭제하면 Unstaged 상태가 된다.
- '-cached' 옵션 : Staging Area에서만 제거하고 Working directory에는 남겨두기
$ git rm -cached |
ㄴ> 내 로컬 하드디스크에 있는 파일은 유지하고, Untracked되도록(=Git만 추적하지 않게) 한다.
ㄴ> 사용) ⓐ '.gitignore 파일'에 추가하는 것을 빼먹었거나,
ⓑ 대용량 로그 파일이나 컴파일된 파일인 .a 파일 같은 것을 실수로 추가했을 때
- $ git rm <file-glob 패턴> : 여러 개의 파일이나 디렉토리를 한꺼번에 삭제
ㄴ> Ex1) log/ 디렉토리에 있는 .log 파일을 모두 삭제
$ git rm log/\*.log
ㄴ> * 앞에 \ 을 사용한 것을 기억하자. 파일명 확장 기능은 쉘에만 있는 것이 아니라 Git 자체에도 있기 때문에 필요하다.
ㄴ> Ex2) ~ 로 끝나는 파일을 모두 삭제
$ git rm \*~
Git 파일 이름 변경하기 : $ git mv <기존 파일명> <변경 파일명>
- Git은 (다른 VCS 시스템과는 달리) 파일 이름의 변경이나 파일의 이동을 명시적으로 관리하지 않는다.
다시 말해서 파일 이름이 변경됐다는 별도의 정보를 저장하지 않으며,
굳이 파일 이름이 변경되었다는 것을 추적하지 않아도 아는 방법이 있다. (무엇인데??0ㅇ0)
- ※ 변경파일은 Stage상태('renamed')가 된다!!
- ▼ 아래 표 각 열의 명령은 모두 동일한 작업이다.
$ mv README.md README |
$ git rm README.md $ git add README |
- Ex▼)
$ git mv README.md README
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD ..." to unstage)
renamed: README.md -> README
END!
스터디 도움 참조 블로그 (References)
- 버전 관리(VC) 위키백과 https://ko.wikipedia.org/wiki/%EB%B2%84%EC%A0%84_%EA%B4%80%EB%A6%AC - 누구나 쉽게 이해할 수 있는 Git 입문 https://backlog.com/git-tutorial/kr/ /입문편/Git의 기본/이력을 관리하는 저장소 https://backlog.com/git-tutorial/kr/intro/intro1_2.html - git--distributed-even-if-your-workflow-isnt (Pro Git Book) https://git-scm.com/book/en/v2 - git--distributed-even-if-your-workflow-isnt (Pro Git Book) / ch2.2 https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%88%98%EC%A0%95%ED%95%98%EA%B3%A0-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0 |