Git 기본 | git commit
git commit 명령
git commit 스태이지(stage) 된 스냅 샷을 로컬 저장소에 커밋하는 명령이다. 커밋 된 스냅 샷은 프로젝트의 “안전하게 보관 된"버전으로 해석 할 수 있고, 명시적으로 변경 지시를 하지 않는 한 Git이 그것을 변경할 수 없다. 이것은 git add 함께 Git의 가장 중요한 종류의 명령이다.
이름은 동일하지만 이 명령은 svn commit 명령과는 전혀 다른 것이다. 스냅 샷은 로컬 저장소에 커밋되기 때문에 다른 Git 저장소에 전혀 영향을주지 않는다.
사용법
git commit
스테이지 된 스냅 샷을 커밋 명령이다. 이 명령을 실행하면 텍스트 편집기가 시작되고 커밋 메시지를 입력해야한다. 메시지를 입력 한 후 파일을 저장하고 편집기를 종료하면 커밋이 수행된다.
git commit -m "<message>"
텍스트 편집기를 시작하지 않고 <message> 를 커밋 메시지로 스테이지 된 스냅 샷을 커밋한다.
git commit -a
작업 디렉터리의 모든 변경 사항의 스냅 샷을 커밋한다. 여기에는 추적 대상 파일 (과거에 git add 명령은 staging 영역에 추가 된 적이 있는 파일)의 수정만 포함된다.
보충 설명
스냅 샷은 항상 로컬 저장소에 커밋된다. 이것은 작업 사본을 중앙 저장소에 커밋 SVN의 기본적인 차이점이다. Git은 필요가 발생하기 전에 중앙 저장소와 통신을 강제하는 것은 아니다. 그냥 준비 영역이 작업 디렉터리와 로컬 저장소 간의 버퍼가있는 것처럼 개발자 개별 로컬 저장소가 작업 성과와 중앙 저장소 사이의 버퍼 역할을 한다.
이것은 Git 사용자 개발 기본 모델에 큰 변화를 일으킨다. Git를 사용하는 개발자는 변경을 직접 중앙 저장소에 커밋하는 것이 아니라 로컬 저장소에 커밋을 축적 할 수 있다. 여기에는 기능을 작은 노력으로 나눌 수 관련성이 강한 커밋을 그룹화 한 채로 유지 가능한 중앙 저장소에 게시하기 전에 로컬 저장소의 구성이 가능 등 SVN 형 협력과 비교하여 많은 장점이 있다. 따라서 개발자는 독립적인 환경에서 작업 할 수 있으며 작업이 적절한 구분을 맞이할 때까지 다른 사람과의 통합을 지연시킬 수 있다.
차이가 아닌 스냅 샷을 저장
SVN과 Git의 사이에는 실질적인 차이가 있지만, 이외에 기본 구조는 완전히 다른 설계 사상에 근거하고 있다. SVN에서 파일의 차이 를 추적하는 반면 Git 버전 관리 모델은 스냅 샷 을 기반으로 한다. 예를 들어, SVN 커밋은 저장소에있는 원본 파일과의 차이점으로 구성된다. 반면 Git은 각 명령마다 각각의 파일의 모든 내용을 기록한다.
Git 튜토리얼 : 변경 내용 아닌 스냅 샷을 저장
이렇게 하면 특정 버전의 파일을 재현 할 때 변경 데이터에서 “조립"필요가 없고, 각 파일의 모든 버전이 Git의 내부 데이터베이스에서 즉시 얻을 수 있기 때문에 Git에서 대부분의 작업은 SVN에 비해 훨씬 빠르게 작동한다.
Git에서 사용되는 스냅 샷 모델은 지점 도구 및 병합 도구에서 협업 워크 플로우에 이르기까지 그 버전 관리 모델의 모든 측면에 광범위한 영향을 미치고 있다.
사용 예
다음의 예에서는 hello.py 라는 이름의 파일 내용을 편집하고 그것을 로컬 저장소에 커밋 할 준비가 되어 있다고 가정한다. 먼저 git add 명령을 사용하여 파일을 스테이지 한 다음 스테이지 된 스냅 샷을 커밋한다.
git add hello.py
git commit
이 명령을 실행하면 텍스트 편집기(git config 명령을 사용하여 임의의 편집기를 지정할 수 있다)가 시작되고 커밋되는 내용의 목록을 표시 함과 동시에 커밋 메시지 입력해야 한다 :
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# modified: hello.py
#
Git은 커밋 메시지의 형식에 관해서 제약은 없지만, 1 행에 커밋 전체 설명을 50 자 이내로 작성하고 두 번째 줄은 빈 줄로 세 번째 줄 이후 변경 사항에 대해 자세히 설명하는 이 표준 형식이다. 다음은 그 예제이다 :
Change the message displayed by hello.py
- Update the sayHello() function to output the user's name
- Change the sayGoodbye() function to a friendlier message
또한 많은 개발자는 커밋 메시지를 현재형으로 기술하는 경향이 있다는 점에 유의해야 한다. 이것은 각 저장소에 대한 작업처럼 읽을 수 있기 때문에 역사를 다시 쓰는 작업을 보다 직관적으로 이해할 수있는 효과가 있다.