[Git] 02-2 git add, git commit 실습
이전 포스팅에서 다루었던 내용을 실습을 통해 익혀보겠습니다. 혹시나 읽지 않았거나, 해당 지식을 얻고자 한다면 아래 글을 꼭 확인해 주세요!
[Git] 02-1. git add, git commit 개념
오늘은 git add, commit에 대해 설명해보겠습니다. 굉장히 중요하고, git에 핵심적인 원리를 담고 있는 시작부분이라 생각됩니다. 기초부터 차근차근 배워보겠습니다! git add, commit add는 파일들을 stage
yunway.tistory.com
실습을 진행하기 전 GUI, CLI을 동시에 비교하기 위해 sourcetree를 설치하겠습니다. BitBucket을 이용할 예정이니, 설치 후 진행하겠습니다. 구체적인 방법은 생략하겠습니다. (구글 서칭 권장)
먼저 사전에 만들어둔 'git_practice' 디렉토리에서 실습을 진행하겠습니다. 해당 과정에 대한 내용은 아래 글을 참고하세요!
https://yunway.tistory.com/20?category=1171057
[Git] 01. git init 저장소 생성 (개념 & 실습)
과거에 배웠지만, 시간이 지나다 보니 내용을 많이 잊어버렸습니다. 학부 수업뿐 아니라, 앞으로 해당 업계에서 생존하려면 Git은 단연코 필연적인 요소입니다. 따라서 기초부터 차근차근 실습
yunway.tistory.com
그리고 vim 명령어를 통해 a.txt라는 파일을 생성하고, start라는 내용을 입력하겠습니다.
User@DESKTOP MINGW64 ~/git_practice (master)
$ vim a.txt
vim 명령어를 실행하면, 입력이 제한됩니다. i버튼을 눌러 insert상태로 변환 후, start를 입력후 esc를 눌러줍니다. 이후 :wq를 입력하고 나오게 되면 정상적으로 파일이 저장됩니다. 다음 화면과 같이 출력되면 성공입니다.
User@DESKTOP MINGW64 ~/git_practice (master)
$ ls -al
total 37
drwxr-xr-x 1 User 197121 0 Jun 30 21:37 ./
drwxr-xr-x 1 User 197121 0 Jun 30 21:37 ../
drwxr-xr-x 1 User 197121 0 Jun 30 21:36 .git/
-rw-r--r-- 1 User 197121 6 Jun 30 21:37 a.txt
여기서 sourcetree를 확인해 보겠습니다.
다음과 같이 스테이지에 올라가지 않은 파일에 a.txt파일이 존재하는 것을 확인할 수 있습니다! 이전 포스팅에서 stage에 대해 학습했습니다. 우리는 add라는 명령을 통해 stage로 파일을 올리고 이를 commit 하게 되면 하나의 버전이 만들어지게 됩니다. 또 올리게 되는 순간 Tracked상태가 됩니다. git에서는 git status를 통해 commit할 파일을 직접 확인할 수 있습니다.
User@DESKTOP MINGW64 ~/git_practice (master)
$ git add a.txt
warning: in the working copy of 'a.txt', LF will be replaced by CRLF the next time Git touches it
User@DESKTOP MINGW64 ~/git_practice (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: a.txt
다음과 같이 진행되었다면 성공입니다! 이제 commit을 해보겠습니다. commit -m을 통해 commit 메시지를 남길 수 있습니다. 첫 commit이므로 1이라고 하겠습니다.
User@DESKTOP MINGW64 ~/git_practice (master)
$ git commit -m 1
[master (root-commit) ff4b2e9] 1
1 file changed, 1 insertion(+)
create mode 100644 a.txt
User@DESKTOP-PUMQHRD MINGW64 ~/git_practice (master)
$ git log
commit ff4b2e97aae3177504fe4d054914f7c4911a1647 (HEAD -> master)
Author: Yun
Date: Fri Jun 30 21:46:20 2023 +0900
1
log를 통해 확인해보면 정상적으로 commit 된 것을 확인할 수 있습니다. 다시 sourcetree를 확인해 보겠습니다.
어떤가요? stage에 a.txt가 정상적으로 등재되고 1이라는 메시지가 나오는 것을 확인할 수 있습니다. 또 수정사항이 +로 표시되어 있습니다. 이는 후에 삭제되거나 추가되는 것 또한 알려줍니다.
그렇다면 간단한 시나리오를 통해 실습을 더 진행해 보겠습니다.
1. a.txt에 content를 추가하고 2로 커밋
2. a.txt에 start를 제거하고 3으로 커밋
3. b.txt를 생성하고 second를 저장한뒤 4로 커밋
User@DESKTOP MINGW64 ~/git_practice (master)
$ git add a.txt
warning: in the working copy of 'a.txt', LF will be replaced by CRLF the next time Git touches it
User@DESKTOP MINGW64 ~/git_practice (master)
$ git commit -m 2
[master f905fd8] 2
1 file changed, 1 insertion(+)
User@DESKTOP MINGW64 ~/git_practice (master)
$ git log
commit f905fd812a6bd3634cd5858582ef656dfbf9655c (HEAD -> master)
Author: Yun
Date: Fri Jun 30 22:09:36 2023 +0900
2
commit ff4b2e97aae3177504fe4d054914f7c4911a1647
Author: Yun
Date: Fri Jun 30 21:46:20 2023 +0900
1
1번 시나리오는 앞서 설명한 내용과 동일합니다. log를 확인해 보면 정상적으로 commit이 진행되었음을 알 수 있습니다.
User@DESKTOP MINGW64 ~/git_practice (master)
$ vim a.txt
User@DESKTOP MINGW64 ~/git_practice (master)
$ git commit -am 3
warning: in the working copy of 'a.txt', LF will be replaced by CRLF the next time Git touches it
[master 914f418] 3
1 file changed, 1 deletion(-)
User@DESKTOP MINGW64 ~/git_practice (master)
$ git log
commit 914f418cf20af6f1a6e163a8cd0b8633c8d8472d (HEAD -> master)
Author: Yun
Date: Fri Jun 30 22:11:19 2023 +0900
3
commit f905fd812a6bd3634cd5858582ef656dfbf9655c
Author: Yun
Date: Fri Jun 30 22:09:36 2023 +0900
2
commit ff4b2e97aae3177504fe4d054914f7c4911a1647
Author: Yun
Date: Fri Jun 30 21:46:20 2023 +0900
1
매번 파일을 수정할 때 마다 해당 파일의 개수만큼 commit을 해야 하는 번거로움이 있습니다. 이를 간단히 해결하기 위한 명령어가 commit -am 입니다. add와 commit을 동시에 진행한다는 장점이 있습니다. 그러나 최초 1회 add가 진행되어야 해당 명령어를 사용할 수 있습니다. log를 통해 2번 시나리오까지 마쳤습니다.
User@DESKTOP MINGW64 ~/git_practice (master)
$ vim b.txt
User@DESKTOP MINGW64 ~/git_practice (master)
$ git add b.txt
warning: in the working copy of 'b.txt', LF will be replaced by CRLF the next time Git touches it
User@DESKTOP-PUMQHRD MINGW64 ~/git_practice (master)
$ git commit -am 4
[master f2c1327] 4
1 file changed, 1 insertion(+)
create mode 100644 b.txt
User@DESKTOP MINGW64 ~/git_practice (master)
$ git log
commit f2c13277ee19ba72cb84983a6b0ed24325619e7a (HEAD -> master)
Author: Yun
Date: Fri Jun 30 22:15:57 2023 +0900
4
commit 914f418cf20af6f1a6e163a8cd0b8633c8d8472d
Author: Yun
Date: Fri Jun 30 22:11:19 2023 +0900
3
commit f905fd812a6bd3634cd5858582ef656dfbf9655c
Author: Yun
Date: Fri Jun 30 22:09:36 2023 +0900
2
commit ff4b2e97aae3177504fe4d054914f7c4911a1647
Author: Yun
Date: Fri Jun 30 21:46:20 2023 +0900
1
3번 시나리오까지 모두 마쳤습니다. 이제 sourcetree를 통해 변한 내용을 GUI로 확인해 보겠습니다.
3번 commit을 확인해보면 start에 -로 제거되었다는 표현을 확인할 수 있습니다. 또 해당 commit으로 후에 이동도 할 수 있습니다. git은 이처럼 버전관리를 효과적으로 할 수 있습니다. 우리는 commit을 잘 보면 숫자와 영어의 긴 조합으로 이루어져 있는 걸 볼 수 있는데요. 이는 Hash값으로 SHA-1을 생각하면 됩니다. 즉, 각각의 내용을 특정 값으로 저장하고 이를 객체화 합니다. 후에 Object, index 등 내부 구성 과정에 대해서도 자세하게 다루겠습니다.
SHA-1에 대해 간단히 말씀드리자면 파일의 이름이 달라도 내용이 같다면 같은 Hash값으로 판단하게 됩니다. 즉, C의 포인터를 생각하면 조금 이해가 쉽습니다. 정말 내용이 같은지를 확인하고 싶다면 아래 사이트에 방문해서 'hi'를 입력해보세요. 저와 같은 결과가 나올 것입니다.
SHA1 online
sha-1 md5 md2 md4 sha256 sha384 sha512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru gost adler32 crc32 crc32b haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 ha
www.sha1-online.com
어떤가요? commit이라는 개념이 이렇게 많은 뜻을 내포하고 있습니다. 오늘 설명은 여기까지입니다. 다음 글에서는 Branch라는 혁신적인 개념에 대해 배워보겠습니다.
질문이나 궁금하신 점은 언제든지 피드백 부탁드립니다!