본문 바로가기
기타/Git

[Git] Commit

by 코딩하는 랄로 2023. 12. 6.
728x90

Commit

git commit 명령어는 정말 많이 사용하는 명렁어 중 하나로, 이전 글에 git diff 를 통해 알아본 staging area에 변경 사항들을 커밋하기 위한 명렁어이다. 여기서 주의할 점은 staging area에 있는 staged 상태의 파일만을 커밋하는데, 즉 git add를 통해 staging area에 추가된 파일만을 커밋한다는 의미이다.

 

git commit 명렁어를 이해하기 위해서는 commit이 무엇인지 알아야 한다. 'commit'은 사전적 용어로 기록한다는 의미를 지닌다. 이러한 사전적 의미와 git commit 명렁어의 적용 대상이 staging area에 있는 파일인 점을 통해 commit 은 staging area에 있는 현재 파일의 상태를 기록함을 의미한다. ( 어떻게 기록되는지는 Git 개체를 참고 )

 

단순히 덮어쓰는 것이 아닌 커밋할 때마다 해당 상태에 대한 새로운 기록을 남기고 Git은 이렇게 기록한 커밋 개체들을 보관해두기 때문에 이를 이용하여 버전 관리 또한 할 수 있게 되는 것이다. 

 

 

 

git commit 사용

이제 git commit 명렁어를 통해 commit을 사용해보자. 먼저 파일을 하나 생성 후 staging area에 추가한 뒤 git commit을 입력해보자.

user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ echo "new file" > file1.txt

user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git add file1.txt

user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git commit

 

해당 명령어를 입력하게 되면 다음과 같이 vim 편집기가 나오게 된다. ( vim 편집기의 경우 기본으로 지정된 편집기이기 때문에 변경하고 싶다면 git config --global core.editor 명령으로 설정할 수 있다. )


# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
#
# Initial commit
#
# Changes to be committed:
#       new file:   file1.txt
#

~
~
~
~
.git/COMMIT_EDITMSG [unix] (20:59 05/12/2023)

 

첫번째 줄은 커밋 시 커밋 메세지를 작성하는 라인이고 이후 부터는 git status 명령의 결과가 채워지게 된다. 해당 결과는 수정하여도 된다. 추가로 어떤 부분이 수정되었는지도 보고 싶을 경우 commit 명렁어에 -v 옵션을 추가하면 git diff 의 결과도 보여지게 된다.

 

해당 vim 편집기 화면이 뜨면 a 를 눌러 커밋 메시지를 작성할 수 있다. 커밋 메세지 작성 완료우 :wq 명렁어를 통해 저장과 동시에 vim 편집기를 종료하게 되면 다음과 같은 결과를 보여준다. 

user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git commit
[master (root-commit) 3d3aa0e] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 file1.txt

 

입력한 커밋 메시지 ( first commit ) 을 보여주고 이전 커밋에서 몇 개의 파일이 변화되고 추가되고 삭제되었는지를 보여준다. 

 

 

 

간편하게 commit 하기

이전의 살펴본 기본 방식은 살짝 귀찮은 감이 없지 않아 있다. git을 사용하다보면 commit을 정말 많이 사용하게 되는데 그 때마다 편집기로 커밋 메세지를 수정하는 과정은 훨씬 더 귀찮은 작업이다. 이를 위해서 깃은 편집기를 거치지 않고 바로 커밋 메세지를 작성할 수 있게 도와주는 -m 옵션을 제공한다.

git commit -m "commit message"

 

이를 사용하여 file1.txt 를 변경한 후 커밋을 해보자.

user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ echo "modified file" > file1.txt

user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git add file1.txt

user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git commit -m "modified file1.txt"
[master 3b826cf] modified file1.txt
 1 file changed, 1 insertion(+), 1 deletion(-)

 

이전보다는 훨씬 간편하게 커밋할 수 있게 되었다!! 커밋 메세지를 지정해줄 때는 위의 예제와 같이 어떤 변경 사항이 있었는지에 대해 간략하게 표현해주는 것이 좋다.

 

 

 

Staging area 생략하기

위에서 git commit -m 명령어를 통해 편하게 커밋할 수 있게 되었는데 여기서 더 간략하게 커밋하는 방법이 무엇이 있을까?? 바로 add 하는 과정을 없애고 바로 커밋을 할 수 있다면 더 편리하게 커밋할 수 있을 것이다. 이를 위해서 commit 명령어는 -a 옵션을 제공한다.

 

해당 옵션을 사용할 경우, 모든 tracked 파일( untracked는 포함되지 않음!! )이 자동으로staging area에 추가되기 때문에 add하는 과정을 생략하고 commit을 할 수 있게 되는 것이다. file1.txt 파일을 수정한 뒤 , -a 옵션과 -m 옵션을 사용하여 간편하게 커밋하여보자. ( 두 옵션을 붙여서 -am 으로도 사용가능 )

user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ echo "new version" > file1.txt

user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git commit -am "file1.txt modified"
[master 8e5a5ad] file1.txt modified
 1 file changed, 1 insertion(+), 1 deletion(-)

 

 

 

 

add 과정의 존재 이유

-a 옵션을 통해 커밋을 하게 되면 add 과정이 생략되어 간편하게 커밋할 수 있게 되었다. 이 때, 처음부터 add 과정이 없으면 굳이 -a 옵션을 사용하지 않아도 되지 않을까? 하는 의문이 생길 수 있다.

 

git 에서 add를 통해 staging area를 거쳐 커밋을 하는 이유로는, 커밋해도 되는 파일만을 알려주기 위해서이다. ( 선택적으로 파일을 커밋하기 위해서 ) 단순히 add 과정 없이 워킹 디렉토리에 있는 파일 전부를 커밋하게 되면 커밋하지 말아야 할 파일들도 커밋하게 된다. 이러한 것을 막고자, add 과정을 통해 커밋할 파일들만을 깃에게 알려주고(staging area에 올리고) 깃을 해당 파일만을 커밋하게 되는 것이다.

 

이러한 과정으로 인해, 추가적으로 특정 파일을 커밋, 즉 기록하기 전에 해당 파일을 정말 기록에 남길 것인지, 기록에 남기면 안되는 파일이 staging area에 있는 것은 아닌지 중간 점검도 할 수 있게 되는 것이다. 그렇기 때문에 -a 옵션은 분명 편리한 옵션이지만 해당 옵션을 사용할 경우 커밋하면 안 되는 파일들이 중간 점검 과정도 없이 커밋되어 버리기 때문에 주의 깊게 사용해야 하는 것이다. 

 

 

 

reference : pro git

728x90

'기타 > Git' 카테고리의 다른 글

[Git] mv  (0) 2023.12.20
[Git] rm  (0) 2023.12.14
[Git] diff  (0) 2023.12.04
[Git] .gitignore  (2) 2023.11.26
[Git] status --short  (1) 2023.11.26