GitHub.com/collections/learn-to-code
GitHub.com/leachim6/hello-world
- remote repository를 local 로 가져오는 방법에는 두 가지가 있다. 첫 번째는 Download ZIP, 두 번째는 URL(
git clone
) - 후자의 방법을 사용하여야 Git repository(.git) 를 포함하여 내려받을 수 있다.
git clone <URL>
parent가 둘이다.
git log
cat .git/HEAD
cat .git/refs/heads/main
# 5e536323618249c28b3da6448d02546001df3acc
git log # merge 된 commit을 찾아라 9de1b
git cat-file -p 9de1b
# tree b63dd
# parent aeb09
# parent 3a4f8
# 부모가 둘이다. merge
git cat-file -p b63dd
-
~/Desktop/hello-world/.git/objects/pack
# pwd: ~/Desktop/hello-world/.git
cat pack-ec3c6607d5520d1114f74dd90919df18cd07f9cd.pack | git unpack-objects
# cd objects/
# objects 폴더로 이동해보면 엄청 많은 폴더가 생성되어 있다.
# 폴더의 개수가 256개(16 * 16), 16진수로 된 두 개의 문자가 폴더명이 되므로
# pack file은 삭제해주자.
rm -f pack-ec3c6607d5520d1114f74dd90919df18cd07f9cd.pack
unpack 되어 무수히 많은 objs들이...(최대 256개의 폴더)
- fetch origin: update from a remote repository
# pwd: hello-world
git checkout -b new-feature
# Switched to a new branch 'new-feature'
git branch
# 이후 vim으로 readme.md를 수정,
# vscode로 다른 파일도 수정,
# parser.p file 삭제.
위를 따르면 다음 상태
vscode
GUI
git add .
git commit -m "Edit some file"
[new-feature 9f68279]
commit을 하면 위 상태처럼 changes가 history에 반영된다. 그리고 분기점이 나뉘었음을 아래에서 확인해볼 수 있다.
# 임의의 파일을 수정한 후
git diff
임의의 파일을 수정한 후 git status
git diff
- ‘a’ file은 수정 전, ‘b’ file은 수정 후
git cat-file -p accefce
git cat-file -p 015d8a9
# a file/ b file 은 각각 old file/ new file 인 셈이다.
# Q. Why there is no such Git object with 015d8a9 SHA1 hash?
# 이전 blobs은 이미 생성되어 저장됐고
# 이후 blobs(015d8a9)은 아직 존재하지 않는다.
# modify만 하고 아직 commit하지 않았기 때문
# 100644 는 permission
# @@ -1 +1,2 @@ : start of
git commit -m "Change a j/Javascript.js file"
이제 error 가 나왔던 다음 커맨드가 가능해졌다
git cat-file -p 015d8a9
즉, 커밋을 함으로써 새로운 blobs들이 생성되었다.