Skip to content

Latest commit

ย 

History

History
1197 lines (919 loc) ยท 37.1 KB

File metadata and controls

1197 lines (919 loc) ยท 37.1 KB

Git ๅฏน่ฑกๆจกๅž‹๏ผšไธ€ๆญฅไธ€ๆญฅๅˆ†ๆž Git ๅบ•ๅฑ‚ๅฏน่ฑกๆจกๅž‹

[toc]

Git ๆ˜ฏไธ€ไธช้žๅธธๅผบๅคง็š„็‰ˆๆœฌ็ฎก็†ๅทฅๅ…ท๏ผŒๆœ‰้žๅธธๅคš็š„ๆฆ‚ๅฟตๅ’Œๅ‘ฝไปค๏ผŒไนŸๆœ‰้žๅธธๅคšไธ”ๅคๆ‚็š„็”จๆณ•ใ€‚ไฝ†ๆ˜ฏๅ…ถๅบ•ๅฑ‚ๆจกๅž‹็›ธๅฏน่€Œ่จ€ๅด้žๅธธ็ฎ€ๅ•๏ผŒไบ†่งฃๅบ•ๅฑ‚ๅฏน่ฑกๆจกๅž‹ๅฐ†้žๅธธๆœ‰ๅŠฉไบŽ็†่งฃไธŠๅฑ‚ๅ‘ฝไปคๅˆฐๅบ•ๅฏนไป“ๅบ“ๅšไบ†ไป€ไนˆใ€‚ๅฆ‚ๆžœๆƒณ่ฆ็ฒพ้€š Git๏ผŒไบ†่งฃๅบ•ๅฑ‚ๅฏน่ฑกๆจกๅž‹ไนŸๆ˜ฏๅฟ…ไธๅฏๅฐ‘็š„ใ€‚ๆœฌๆ–‡ๅฐ†ไผš้€š่ฟ‡ๅŸบๆœฌ็š„ๅ‘ฝไปคๆ“ไฝœ๏ผŒๅˆ†ๆžๆฏไธ€ๆญฅๆ“ไฝœๅฏนไป“ๅบ“ๆ•ฐๆฎๅšไบ†ๅ“ชไบ›ๆ”นๅŠจ๏ผŒ่ฟ›่€Œๅˆ†ๆžๅ‡บ Git ๅบ•ๅฑ‚ๅฏน่ฑกๆจกๅž‹ใ€‚

Git ๅŸบๆœฌๆฆ‚ๅฟต

SHA

ๆ‰€ๆœ‰็”จๆฅ่กจ็คบ้กน็›ฎๅކๅฒไฟกๆฏ็š„ๆ–‡ไปถ๏ผŒ้ƒฝๆ˜ฏ้€š่ฟ‡ไธ€ไธช 40 ไธชๅญ—็ฌฆ็š„๏ผˆ40-digit๏ผ‰โ€œๅฏน่ฑกๅโ€ ๆฅ็ดขๅผ•็š„๏ผŒๅฏน่ฑกๅ็œ‹่ตทๆฅๅƒ่ฟ™ๆ ท:

6ff87c4664981e4397625791c8ea3bbb5f2279a3

ๅœจๅŽ่พนไฝฟ็”จๅฏน่ฑกๅๆ—ถ๏ผŒๅชไฝฟ็”จๅ‰้ขๅ‡ ไธชๅญ—็ฌฆๅณๅฏ๏ผŒไฝ†ๆ˜ฏๆœ€ๅฐ‘้œ€่ฆ 4 ไธชใ€‚

ไฝ ไผšๅœจ Git ้‡Œๅˆฐๅค„็œ‹ๅˆฐ่ฟ™็ง โ€œ40 ไธชๅญ—็ฌฆโ€ ๅญ—็ฌฆไธฒใ€‚ๆฏไธ€ไธช โ€œๅฏน่ฑกๅโ€ ้ƒฝๆ˜ฏๅฏน โ€œๅฏน่ฑกโ€ ๅ†…ๅฎนๅš SHA1 ๅ“ˆๅธŒ่ฎก็ฎ—ๅพ—ๆฅ็š„ใ€‚่ฟ™ๆ ทๅฐฑๆ„ๅ‘ณ็€ไธคไธชไธๅŒๅ†…ๅฎน็š„ๅฏน่ฑกๅ‡ ไนŽไธๅฏ่ƒฝ๏ผˆ็†่ฎบไธŠๆ˜ฏๅฏ่ƒฝๅ‘็”Ÿ็ขฐๆ’ž็š„๏ผ‰ๆœ‰็›ธๅŒ็š„ โ€œๅฏน่ฑกๅโ€ใ€‚

่ฟ™ๆ ทๅšไผšๆœ‰ๅ‡ ไธชๅฅฝๅค„๏ผš

  • ๅช่ฆๆฏ”่พƒๅฏน่ฑกๅ๏ผŒๅฐฑๅฏไปฅๅพˆๅฟซ็š„ๅˆคๆ–ญไธคไธชๅฏน่ฑกๆ˜ฏๅฆ็›ธๅŒใ€‚

    ๅ› ไธบๅœจๆฏไธชไป“ๅบ“๏ผˆrepository๏ผ‰็š„ โ€œๅฏน่ฑกๅโ€ ็š„่ฎก็ฎ—ๆ–นๆณ•้ƒฝๅฎŒๅ…จไธ€ๆ ท๏ผŒๅฆ‚ๆžœๅŒๆ ท็š„ๅ†…ๅฎนๅญ˜ๅœจไธคไธชไธๅŒ็š„ไป“ๅบ“ไธญ๏ผŒๅฐฑไผšๅญ˜ๅœจ็›ธๅŒ็š„ โ€œๅฏน่ฑกๅโ€ ไธ‹ใ€‚

  • ่ฟ˜ๅฏไปฅ้€š่ฟ‡ๆฃ€ๆŸฅๅฏน่ฑกๅ†…ๅฎน็š„ SHA1 ็š„ๅ“ˆๅธŒๅ€ผๅ’Œ โ€œๅฏน่ฑกๅโ€ ๆ˜ฏๅฆ็›ธๅŒ๏ผŒๆฅๅˆคๆ–ญๅฏน่ฑกๅ†…ๅฎนๆ˜ฏๅฆๆญฃ็กฎใ€‚

ๅฏน่ฑก

ๆฏไธชๅฏน่ฑก (object) ๅŒ…ๆ‹ฌไธ‰ไธช้ƒจๅˆ†๏ผš็ฑปๅž‹ใ€ๅคงๅฐๅ’Œๅ†…ๅฎนใ€‚ๅคงๅฐๅฐฑๆ˜ฏๆŒ‡ๅ†…ๅฎน็š„ๅคงๅฐ๏ผŒๅ†…ๅฎนๅ–ๅ†ณไบŽๅฏน่ฑก็š„็ฑปๅž‹ใ€‚

ๆœ‰ๅ››็ง็ฑปๅž‹็š„ๅฏน่ฑก๏ผš"blob"ใ€"tree"ใ€"commit" ๅ’Œ "tag"ใ€‚

ๅ‡ ไนŽๆ‰€ๆœ‰็š„ Git ๅŠŸ่ƒฝ้ƒฝๆ˜ฏไฝฟ็”จ่ฟ™ๅ››ไธช็ฎ€ๅ•็š„ๅฏน่ฑก็ฑปๅž‹ๆฅๅฎŒๆˆ็š„ใ€‚ๅฎƒๅฐฑๅƒๆ˜ฏๅœจไฝ ๆœฌๆœบ็š„ๆ–‡ไปถ็ณป็ปŸไน‹ไธŠๆž„ๅปบไธ€ไธชๅฐ็š„ๆ–‡ไปถ็ณป็ปŸใ€‚

blob (ๆ–‡ไปถ) ๅฏน่ฑก

blob ็”จๆฅๅญ˜ๅ‚จๆ–‡ไปถๆ•ฐๆฎ๏ผŒ้€šๅธธๆ˜ฏไธ€ไธชๆ–‡ไปถใ€‚

blob

tree (็›ฎๅฝ•) ๅฏน่ฑก

tree ๅƒไธ€ไธช็›ฎๅฝ•๏ผŒ็ฎก็† tree๏ผˆๅญ็›ฎๅฝ•๏ผ‰ ๆˆ– blob๏ผˆๆ–‡ไปถ๏ผ‰

tree

commit (ๆไบค) ๅฏน่ฑก

ไธ€ไธช commit ๅชๆŒ‡ๅ‘ไธ€ไธช tree๏ผŒๅฎƒ็”จๆฅๆ ‡่ฎฐ้กน็›ฎๆŸไธ€ไธช็‰นๅฎšๆ—ถ้—ด็‚น็š„็Šถๆ€ใ€‚commit ไฟๅญ˜ไบ†ๆ ‘ๆ น็š„ ๅฏน่ฑกๅใ€‚

ๅฎƒๅŒ…ๆ‹ฌไธ€ไบ›ๅ…ณไบŽๆ—ถ้—ด็‚น็š„ๅ…ƒๆ•ฐๆฎ๏ผŒๅฆ‚ ๆ—ถ้—ดๆˆณใ€ๆœ€่ฟ‘ไธ€ๆฌกๆไบค็š„ไฝœ่€…ใ€ๆŒ‡ๅ‘ไธŠๆฌกๆไบค๏ผˆcommits๏ผ‰็š„ๆŒ‡้’ˆ ็ญ‰็ญ‰ใ€‚

tree

$ git cat-file -p 830f4857e9f579818c5e69104d3e2cc30f1f0d0d
tree f25061fa4f8b3bffbf8ebcc3ab2351efdad2f605
parent 06e13701ac86eb09c2035329a5e1c18f95898cf2
author smile<3293172751nss@gmail.com> 1526828841 +0800
committer smile<3293172751nss@gmail.com> 1526828841 +0800

commit message

tag (ๆ ‡็ญพ) ๅฏน่ฑก

tag

ไธ€ไธช tag ๆ˜ฏๆฅๆ ‡่ฎฐๆŸไธ€ไธช commit ็š„ๆ–นๆณ•ใ€‚

ๅฎž้™…ไธŠ tag ๆœฌ่บซๆ˜ฏๆ–‡ไปถๅ๏ผŒๅ†…ๅฎนๆ˜ฏ commit ็š„ๅฏน่ฑกๅใ€‚tag ๆ˜ฏ commit ็š„ๅˆซๅ๏ผŒ็ฑปไผผไบŽๅŸŸๅๅ’Œ ip ๅœฐๅ€็š„ๅ…ณ็ณปใ€‚

$ cat .git/refs/tags/v0.0.0
830f4857e9f579818c5e69104d3e2cc30f1f0d0d

commit -> tree -> blob

object-c-t-b

ไปŽๅ›พไธŠๅฏไปฅ็œ‹ๅ‡บ๏ผšไธ€ไธช commit ๆŒ‡ๅ‘ไบ†ไธ€ๆฃต็”ฑ tree ๅ’Œ blob ๆž„ๆˆ็š„ Git ๅฏน่ฑกๆ ‘ใ€‚

ไธŽๅ…ถไป–็‰ˆๆœฌๆŽงๅˆถ็ณป็ปŸ็š„ๅŒบๅˆซ

Git ไธŽไฝ ็†Ÿๆ‚‰็š„ๅคง้ƒจๅˆ†็‰ˆๆœฌๆŽงๅˆถ็ณป็ปŸ็š„ๅทฎๅˆซๆ˜ฏๅพˆๅคง็š„ใ€‚

ไนŸ่ฎธไฝ ็†Ÿๆ‚‰ Subversionใ€CVSใ€Perforceใ€Mercurial ็ญ‰็ญ‰๏ผŒไป–ไปฌไฝฟ็”จ โ€œๅขž้‡ๆ–‡ไปถ็ณป็ปŸโ€ ๏ผˆDelta Storage systems๏ผ‰, ๅฐฑๆ˜ฏ่ฏดๅฎƒไปฌๅญ˜ๅ‚จๆฏๆฌกๆไบค (commit) ไน‹้—ด็š„ๅทฎๅผ‚ใ€‚

Git ๆญฃๅฅฝไธŽไน‹็›ธๅ๏ผŒๅฎƒไผšๆŠŠไฝ ็š„ๆฏๆฌกๆไบค็š„ๆ–‡ไปถ็š„ๅ…จ้ƒจๅ†…ๅฎน๏ผˆsnapshot๏ผ‰้ƒฝไผš่ฎฐๅฝ•ไธ‹ๆฅใ€‚

่ฟ™ไผšๆ˜ฏๅœจไฝฟ็”จ Git ๆ—ถ็š„ไธ€ไธชๅพˆ้‡่ฆ็š„็†ๅฟตใ€‚

็ปผไธŠ๏ผŒGit ๅฏน่ฑกๆจกๅž‹้žๅธธ็ฎ€ๅ•๏ผŒไธŽๆ™ฎ้€š็š„ๆ–‡ไปถ็ณป็ปŸ้žๅธธ็š„็›ธไผผใ€‚

ไธ€ๆญฅไธ€ๆญฅไบ†่งฃ Git ๅœจๅšไป€ไนˆ

ๅˆๅง‹ๅŒ–ไป“ๅบ“

ๅˆๅง‹ๅŒ–็›ฎๅฝ•ๅนถๅˆ›ๅปบไธ€ไธช Git ไป“ๅบ“

$ cd git-obj-model
$ git init
Initialized empty Git repository in /Users/liuyanjie/git-obj-model/.git/

็œ‹ไธ€ไธ‹ๅˆๅง‹ๅŒ–็š„ git ไป“ๅบ“ไธญๅˆฐๅบ•ๆœ‰ไบ›ไป€ไนˆๅ†…ๅฎนใ€‚

$ tree .git
.git
โ”œโ”€โ”€ HEAD
โ”œโ”€โ”€ config
โ”œโ”€โ”€ description
โ”œโ”€โ”€ hooks
โ”‚   โ”œโ”€โ”€ applypatch-msg.sample
โ”‚   โ”œโ”€โ”€ commit-msg.sample
โ”‚   โ”œโ”€โ”€ fsmonitor-watchman.sample
โ”‚   โ”œโ”€โ”€ post-update.sample
โ”‚   โ”œโ”€โ”€ pre-applypatch.sample
โ”‚   โ”œโ”€โ”€ pre-commit.sample
โ”‚   โ”œโ”€โ”€ pre-push.sample
โ”‚   โ”œโ”€โ”€ pre-rebase.sample
โ”‚   โ”œโ”€โ”€ pre-receive.sample
โ”‚   โ”œโ”€โ”€ prepare-commit-msg.sample
โ”‚   โ””โ”€โ”€ update.sample
โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ exclude
โ”œโ”€โ”€ objects
โ”‚   โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ pack
โ””โ”€โ”€ refs
    โ”œโ”€โ”€ heads
    โ””โ”€โ”€ tags

8 directories, 15 files
$ cat .git/config
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
	precomposeunicode = true
$ cat .git/HEAD
ref: refs/heads/master

ๆŸฅ็œ‹ไป“ๅบ“็Šถๆ€

$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

ๅŽ้ขๅฟฝ็•ฅ .git/hooks/ ไธ‹็š„ๆ–‡ไปถใ€‚

ๅขžๅŠ ไธ€ไธชๆ–‡ไปถ README.md

็Žฐๅœจๅˆ›ๅปบไธ€ไธช README.md๏ผŒๆŸฅ็œ‹ .git ็›ฎๅฝ•๏ผŒๅ‘็Žฐๆฒกๆœ‰ไป€ไนˆๅ˜ๅŒ–ใ€‚

$ echo "# Readme" > README.md

$ tree .git
.git
โ”œโ”€โ”€ HEAD
โ”œโ”€โ”€ config
โ”œโ”€โ”€ description
โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ exclude
โ”œโ”€โ”€ objects
โ”‚   โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ pack
โ””โ”€โ”€ refs
    โ”œโ”€โ”€ heads
    โ””โ”€โ”€ tags

8 directories, 15 files

ๆŸฅ็œ‹ๅฝ“ๅ‰็Šถๆ€๏ผŒๅฏไปฅ็œ‹ๅˆฐ๏ผŒๆญคๆ—ถๆœ‰ไธ€ไธชๆœช่ฟฝ่ธช็š„ README.md ๆ–‡ไปถ๏ผŒๆญคๆ–‡ไปถๅญ˜ๅœจไบŽ ๅทฅไฝœๅŒบ ไธญใ€‚

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	README.md

nothing added to commit but untracked files present (use "git add" to track)

ๆ‰ง่กŒ git add ๅ‘ฝไปคๅŽ๏ผŒๅฏไปฅ็œ‹ๅˆฐๅขžๅŠ ไบ†ไธคไธชๆ–‡ไปถ๏ผš

  • .git/index
  • .git/objects/f3/954314c1026028e77ea3a765aadefa67b45195

git add ๆŠŠๆ–‡ไปถๆš‚ๅญ˜ๅˆฐ็ดขๅผ•ไธญไธบไธ‹ไธ€ๆฌกๆไบคๅšๅ‡†ๅค‡๏ผŒgit commit ๅˆ›ๅปบๆ–ฐ็š„ๆไบคใ€‚

ๅบ”่ฏฅ็Ÿฅ้“๏ผŒ่ฟ™ๅบ”่ฏฅๆ˜ฏไธ€ไธช blob ็ฑปๅž‹็š„ๆ–‡ไปถ๏ผŒ้‡Œ้ขๅญ˜ๅ‚จๆ–‡ไปถๅ†…ๅฎนใ€‚

$ git add README.md

$ tree .git
.git
โ”œโ”€โ”€ HEAD
โ”œโ”€โ”€ config
โ”œโ”€โ”€ description
โ”œโ”€โ”€ index
โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ exclude
โ”œโ”€โ”€ objects
โ”‚   โ”œโ”€โ”€ f3
โ”‚   โ”‚   โ””โ”€โ”€ 954314c1026028e77ea3a765aadefa67b45195
โ”‚   โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ pack
โ””โ”€โ”€ refs
    โ”œโ”€โ”€ heads
    โ””โ”€โ”€ tags

9 directories, 17 files

ๆŸฅ็œ‹ๅฝ“ๅ‰็Šถๆ€

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   README.md

ๆŸฅ็œ‹ๅฏน่ฑกๅ†…ๅฎน

$ git cat-file -p f39543
# Readme

ๆŸฅ็œ‹ๆš‚ๅญ˜ๅŒบ

$ git ls-files --stage
100644 f3954314c1026028e77ea3a765aadefa67b45195 0	README.md

.git/index ๆ˜ฏ Git ็ดขๅผ•ๆ–‡ไปถ๏ผŒๆ˜ฏไธ€ไธชๅœจ ๅทฅไฝœๅŒบ ๅ’Œ ไป“ๅบ“ ้—ด็š„ ๆš‚ๅญ˜ๅŒบๅŸŸ(staging area)ใ€‚

็ดขๅผ•ๆ˜ฏไธ€ไธชไบŒ่ฟ›ๅˆถๆ ผๅผ็š„ๆ–‡ไปถ๏ผŒ้‡Œ้ขๅญ˜ๆ”พไบ†ไธŽๅฝ“ๅ‰ๆš‚ๅญ˜ๅ†…ๅฎน็›ธๅ…ณ็š„ไฟกๆฏ๏ผŒๅŒ…ๆ‹ฌๆš‚ๅญ˜็š„ๆ–‡ไปถๅใ€ๆ–‡ไปถๅ†…ๅฎน็š„SHA1ๅ“ˆๅธŒไธฒๅ€ผ ๅ’Œ ๆ–‡ไปถ่ฎฟ้—ฎๆƒ้™๏ผŒๆ•ดไธช็ดขๅผ•ๆ–‡ไปถ็š„ๅ†…ๅฎนไปฅๆš‚ๅญ˜็š„ๆ–‡ไปถๅ่ฟ›่กŒๆŽ’ git ls-files โ€“stage ๅบไฟๅญ˜็š„ใ€‚

ๅ› ไธบ่ฟ™ไธชๆ–‡ไปถ่ฎฐๅฝ•ไบ†ๅฐ†่ฆๆไบค็š„ๆ–‡ไปถ๏ผŒๆ‰€ไปฅๆˆ‘ไปฌๆ‰่ƒฝๅคŸๅคšๆฌกไฟฎๆ”นไธ€่ตทๆไบค (commit)ใ€‚

ๆ‰€ไปฅๅˆ›ๅปบไบ†ไธ€ไธชๆ–ฐ็š„ๆไบค (commit)๏ผŒๆไบค็š„ไธ€่ˆฌๆ˜ฏๆš‚ๅญ˜ๅŒบ้‡Œ็š„ๅ†…ๅฎน๏ผŒ่€Œไธๆ˜ฏๅทฅไฝœ็›ฎๅฝ•ไธญ็š„ๅ†…ๅฎนใ€‚

ไธ€ไธช Git ้กน็›ฎไธญๆ–‡ไปถ็š„็Šถๆ€ๅคงๆฆ‚ๅˆ†ๆˆไธ‹้ข็š„ไธคๅคง็ฑป๏ผŒ่€Œ็ฌฌไบŒๅคง็ฑปๅˆๅˆ†ไธบไธ‰ๅฐ็ฑป๏ผš

  1. ๆœช่ขซ่ทŸ่ธช็š„ๆ–‡ไปถ๏ผˆUntracked files๏ผ‰
  2. ๅทฒ่ขซ่ทŸ่ธช็š„ๆ–‡ไปถ๏ผˆTracked files๏ผ‰
    1. ่ขซไฟฎๆ”น ๆœชๆš‚ๅญ˜ ็š„ๆ–‡ไปถ๏ผˆChanged but not updated ๆˆ– Modified๏ผ‰
    2. ่ขซไฟฎๆ”น ๅทฒๆš‚ๅญ˜ ๅฏไปฅ ่ขซๆไบค ็š„ๆ–‡ไปถ๏ผˆChanges to be committed ๆˆ– Staged๏ผ‰
    3. ๆœชไฟฎๆ”น ็š„ๆ–‡ไปถ๏ผˆ่‡ชไธŠๆฌกๆไบคไปฅๆฅ๏ผ‰(Clean ๆˆ– Unmodified)
Changes to be committed:
  (no files)
Changes not staged for commit:
  (no files)
Untracked files:
? .gitignore

ๆ‰ง่กŒ git commit ๅ‘ฝไปค๏ผŒๅ‘็Žฐ่ทฏๅพ„ไธ‹ๅˆๅขžๅŠ ไบ†ไธคไธชๆ–‡ไปถ๏ผš

  • .git/objects/9d/978d59f2f22062c0382c859f4c3ef929026303
  • .git/objects/c1/067ba0a7ba51f937518c9bc051ea744ca748fe

ไปŽไธŠ้ข็š„็ป“ๆž„ๅ›พ๏ผŒๅฏไปฅๆƒณๅˆฐ๏ผš

ๆไบคๅฏๅฎšไผšไบง็”Ÿไธ€ไธชๆไบคๅฏน่ฑก๏ผŒๆไบคๅฏน่ฑกๆŒ‡ๅ‘ไธ€ไธชๆ ‘ๅฏน่ฑก๏ผŒๆ ‘ๅฏน่ฑกๅŒ…ๅซไธŠไธ€ๆญฅๆทปๅŠ ็š„ blob ๅฏน่ฑกใ€‚

ไธ‹้ขๅฐ†้€š่ฟ‡ๆŸฅ็œ‹ๆ–‡ไปถๅ†…ๅฎน้ชŒ่ฏ่ฟ™ไธ€็‚นใ€‚

$ git commit -m "First Commmit" README.md

[master (root-commit) 033fa1a] First Commmit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

$ tree .git
.git
โ”œโ”€โ”€ COMMIT_EDITMSG
โ”œโ”€โ”€ HEAD
โ”œโ”€โ”€ config
โ”œโ”€โ”€ description
โ”œโ”€โ”€ index
โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ exclude
โ”œโ”€โ”€ logs
โ”‚   โ”œโ”€โ”€ HEAD
โ”‚   โ””โ”€โ”€ refs
โ”‚       โ””โ”€โ”€ heads
โ”‚           โ””โ”€โ”€ master
โ”œโ”€โ”€ objects
โ”‚   โ”œโ”€โ”€ 03
โ”‚   โ”‚   โ””โ”€โ”€ 3fa1ab71f0d54f348f07a3a0ffcefd52804df5 +
โ”‚   โ”œโ”€โ”€ c1
โ”‚   โ”‚   โ””โ”€โ”€ 067ba0a7ba51f937518c9bc051ea744ca748fe +
โ”‚   โ”œโ”€โ”€ f3
โ”‚   โ”‚   โ””โ”€โ”€ 954314c1026028e77ea3a765aadefa67b45195
โ”‚   โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ pack
โ””โ”€โ”€ refs
    โ”œโ”€โ”€ heads
    โ”‚   โ””โ”€โ”€ master
    โ””โ”€โ”€ tags

14 directories, 23 files

ๆŸฅ็œ‹ 033f ๅฏน่ฑกๅ†…ๅฎน๏ผŒๆญคๆ—ถไธ็Ÿฅ้“่ฟ™ไธชๆ–‡ไปถ็ฑปๅž‹ๅŠๅ†…ๅฎนๆ˜ฏไป€ไนˆ

ๆญคๆ—ถ๏ผŒcommit ๅฏน่ฑกไธบๅˆๅง‹ๆไบค๏ผŒๆ‰€ไปฅๅนถๆ—  parent ๅผ•็”จใ€‚

$ git cat-file -p 033f
tree c1067ba0a7ba51f937518c9bc051ea744ca748fe
author smile<3293172751nss@gmail.com> 1527521894 +0800
committer smile<3293172751nss@gmail.com> 1527521894 +0800

First Commmit

ๆŸฅ็œ‹ c106 ๅฏน่ฑกๅ†…ๅฎน๏ผŒ้€š่ฟ‡ไธŠไธ€ๆญฅ๏ผŒๅทฒ็Ÿฅๆญคๅฏน่ฑกๆ˜ฏไธ€ไธช tree ็ฑปๅž‹็š„ๅฏน่ฑก๏ผŒ้€š่ฟ‡ๅ†…ๅฎนๅฏไปฅ็œ‹ๅˆฐ๏ผŒๆ ‘็ฑปๅž‹็š„ๅฏน่ฑกๅฎž้™…ๅฐฑๆ˜ฏๅญ˜ๅ‚จๆฏ่กŒไธ€ๆกๆ•ฐๆฎ็š„ๅˆ—่กจใ€‚

$ git cat-file -p c106
100644 blob f3954314c1026028e77ea3a765aadefa67b45195	README.md

ๅ†็œ‹ .git/refs/heads/master ๆ–‡ไปถๅ†…ๅฎน

ๆ–‡ไปถๅ†…ๅฎนๅชๆœ‰ไธ€่กŒ๏ผŒๅ†…ๅฎนๆ˜ฏ 033f ๅฏน่ฑกใ€‚master ๅณๆ˜ฏ master ๅˆ†ๆ”ฏ็š„็‰ฉ็†่กจ็คบใ€‚

$ cat .git/refs/heads/master
033fa1ab71f0d54f348f07a3a0ffcefd52804df5

ๅŒๆ—ถ๏ผŒ่ฟ˜ๅฏ็œ‹ๅˆฐ๏ผŒๆ–ฐๅขžไบ† .git/logs ็›ฎๅฝ•ๅŠๅ†…ๅฎน

่ฏฅ็›ฎๅฝ•ไธ‹ไฟๅญ˜ไบ†ๅ„ไธชๅˆ†ๆ”ฏ็š„ๆไบค่ฎฐๅฝ•

$ cat .git/logs/refs/heads/master
0000000000000000000000000000000000000000 033fa1ab71f0d54f348f07a3a0ffcefd52804df5 

$ cat .git/logs/HEAD
0000000000000000000000000000000000000000 033fa1ab71f0d54f348f07a3a0ffcefd52804df5 

Tag๏ผš

$ git tag v0.0.1 -m 'tag v0.0.1'

ๆŸฅ็œ‹็›ฎๅฝ•ๆ–‡ไปถๅ˜ๅŒ–

$ tree .git
.git
โ”œโ”€โ”€ COMMIT_EDITMSG
โ”œโ”€โ”€ HEAD
โ”œโ”€โ”€ config
โ”œโ”€โ”€ description
โ”œโ”€โ”€ index
โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ exclude
โ”œโ”€โ”€ logs
โ”‚   โ”œโ”€โ”€ HEAD
โ”‚   โ””โ”€โ”€ refs
โ”‚       โ””โ”€โ”€ heads
โ”‚           โ””โ”€โ”€ master
โ”œโ”€โ”€ objects
โ”‚   โ”œโ”€โ”€ 03
โ”‚   โ”‚   โ””โ”€โ”€ 3fa1ab71f0d54f348f07a3a0ffcefd52804df5
โ”‚   โ”œโ”€โ”€ c1
โ”‚   โ”‚   โ””โ”€โ”€ 067ba0a7ba51f937518c9bc051ea744ca748fe
โ”‚   โ”œโ”€โ”€ cc
โ”‚   โ”‚   โ””โ”€โ”€ f88a6f1649213499841c33f9bb36d1d8756fb7
โ”‚   โ”œโ”€โ”€ f3
โ”‚   โ”‚   โ””โ”€โ”€ 954314c1026028e77ea3a765aadefa67b45195
โ”‚   โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ pack
โ””โ”€โ”€ refs
    โ”œโ”€โ”€ heads
    โ”‚   โ””โ”€โ”€ master
    โ””โ”€โ”€ tags
        โ””โ”€โ”€ v0.0.1

15 directories, 25 files

ๆŸฅ็œ‹ .git/refs/tags/v0.0.1 ๆ–‡ไปถๅ†…ๅฎน๏ผŒๅฏไปฅ็œ‹ๅˆฐๅ†…ๅฎนๆฐๅฅฝๆ˜ฏๆ–ฐๅขž็š„ objects ๅฏน่ฑกๅ๏ผŒๆ‰€ไปฅๅฏๆƒณ่€Œ็Ÿฅ ccf8 ๆ˜ฏไธ€ไธช tag ็ฑปๅž‹็š„ๅฏน่ฑก

$ cat .git/refs/tags/v0.0.1
ccf88a6f1649213499841c33f9bb36d1d8756fb7

ๆŸฅ็œ‹ๆ–ฐๅขž็š„ ccf8 ๆ–‡ไปถๅ†…ๅฎน๏ผŒๆ–‡ไปถๆŒ‡ๅ‘ไบ† commit ๅฏน่ฑก 033f

$ git cat-file -p ccf8
object 033fa1ab71f0d54f348f07a3a0ffcefd52804df5
type commit
tag v0.0.1

tag v0.0.1

้€š่ฟ‡ไปฅไธŠๆŸฅ็œ‹ .git ็›ฎๅฝ•็š„ๅ˜ๅŒ–่ฟ‡็จ‹๏ผŒๅฏไปฅๅคง่‡ดๅˆ†ๆžๅ‡บ Git ๆ˜ฏๅฆ‚ไฝ•ๅญ˜ๅ‚จ่ฟ™ไบ›ๆ–‡ไปถๅ†…ๅฎน็š„ใ€‚

ไธŠ้ขๅชๆ‰ง่กŒไบ† git add ๅ’Œ git commit ไธคๆกๆ“ไฝœใ€‚

็ปง็ปญๆทปๅŠ ๆ–‡ไปถ

$ echo "# CHANGELOG" > CHANGELOG.md

$ echo "# CONTRIBUTING" > CONTRIBUTING.md

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

	CHANGELOG.md
	CONTRIBUTING.md

nothing added to commit but untracked files present (use "git add" to track)

$ git add CHANGELOG.md CONTRIBUTING.md

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   CHANGELOG.md
	new file:   CONTRIBUTING.md
$ tree .git
.git
โ”œโ”€โ”€ COMMIT_EDITMSG
โ”œโ”€โ”€ HEAD
โ”œโ”€โ”€ config
โ”œโ”€โ”€ description
โ”œโ”€โ”€ index
โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ exclude
โ”œโ”€โ”€ logs
โ”‚   โ”œโ”€โ”€ HEAD
โ”‚   โ””โ”€โ”€ refs
โ”‚       โ””โ”€โ”€ heads
โ”‚           โ””โ”€โ”€ master
โ”œโ”€โ”€ objects
โ”‚   โ”œโ”€โ”€ 03
โ”‚   โ”‚   โ””โ”€โ”€ 3fa1ab71f0d54f348f07a3a0ffcefd52804df5
โ”‚   โ”œโ”€โ”€ a0
โ”‚   โ”‚   โ””โ”€โ”€ cf709bc0991b5340080f944d02894dc1596d46
โ”‚   โ”œโ”€โ”€ c1
โ”‚   โ”‚   โ””โ”€โ”€ 067ba0a7ba51f937518c9bc051ea744ca748fe
โ”‚   โ”œโ”€โ”€ c6
โ”‚   โ”‚   โ””โ”€โ”€ b9e95b39b8cd8ead8bbf4b118104741017de1b
โ”‚   โ”œโ”€โ”€ cc
โ”‚   โ”‚   โ””โ”€โ”€ f88a6f1649213499841c33f9bb36d1d8756fb7
โ”‚   โ”œโ”€โ”€ f3
โ”‚   โ”‚   โ””โ”€โ”€ 954314c1026028e77ea3a765aadefa67b45195
โ”‚   โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ pack
โ””โ”€โ”€ refs
    โ”œโ”€โ”€ heads
    โ”‚   โ””โ”€โ”€ master
    โ””โ”€โ”€ tags
        โ””โ”€โ”€ v0.0.1

17 directories, 27 files
$ git ls-files --stage
100644 a0cf709bc0991b5340080f944d02894dc1596d46 0	CHANGELOG.md
100644 c6b9e95b39b8cd8ead8bbf4b118104741017de1b 0	CONTRIBUTING.md
100644 f3954314c1026028e77ea3a765aadefa67b45195 0	README.md

ๅˆ†ๅˆซๆŸฅ็œ‹ไธ€ไธ‹ๅ„ไธชๆ–‡ไปถ็š„ๅ†…ๅฎน

$ git cat-file -p a0cf
# CHANGELOG

$ git cat-file -p c6b9
# CONTRIBUTING

$ git cat-file -p f395
# Readme

ๅ†ๆŸฅ็œ‹ไธ€ไธ‹ๆ ‘ๅฏน่ฑก็š„ๅ†…ๅฎน๏ผŒ็„ถ่€Œๅนถๆฒกๆœ‰ไปปไฝ•ๅ˜ๅŒ–

$ git cat-file -p c106
100644 blob f3954314c1026028e77ea3a765aadefa67b45195	README.md

ไธ‹้ขๆไบค่ฟ™ไธคไธชๆ–‡ไปถ๏ผŒๅฏไปฅ้€š่ฟ‡ๆ—ฅๅฟ—ๆ–นไพฟ็š„ๆŸฅ็œ‹ไฟกๆฏใ€‚

$ git commit --all -m "add CHANGELOG.md and CONTRIBUTING.md files"
[master 28baf4f] add CHANGELOG.md and CONTRIBUTING.md files
 2 files changed, 2 insertions(+)
 create mode 100644 CHANGELOG.md
 create mode 100644 CONTRIBUTING.md

ๅŒๆ ทๅ†็œ‹ไธ€ไธ‹.git ็›ฎๅฝ•ไธ‹็š„ๅ†…ๅฎน

$ tree .git
.git
โ”œโ”€โ”€ COMMIT_EDITMSG
โ”œโ”€โ”€ HEAD
โ”œโ”€โ”€ config
โ”œโ”€โ”€ description
โ”œโ”€โ”€ index
โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ exclude
โ”œโ”€โ”€ logs
โ”‚   โ”œโ”€โ”€ HEAD
โ”‚   โ””โ”€โ”€ refs
โ”‚       โ””โ”€โ”€ heads
โ”‚           โ””โ”€โ”€ master
โ”œโ”€โ”€ objects
โ”‚   โ”œโ”€โ”€ 03
โ”‚   โ”‚   โ””โ”€โ”€ 3fa1ab71f0d54f348f07a3a0ffcefd52804df5
โ”‚   โ”œโ”€โ”€ 28
โ”‚   โ”‚   โ””โ”€โ”€ baf4f77fb49abf99c18bc1c12363d898f3ced7
โ”‚   โ”œโ”€โ”€ 2c
โ”‚   โ”‚   โ””โ”€โ”€ affd90cd736e58f516e3988e3af84f5fa42b4f
โ”‚   โ”œโ”€โ”€ a0
โ”‚   โ”‚   โ””โ”€โ”€ cf709bc0991b5340080f944d02894dc1596d46
โ”‚   โ”œโ”€โ”€ c1
โ”‚   โ”‚   โ””โ”€โ”€ 067ba0a7ba51f937518c9bc051ea744ca748fe
โ”‚   โ”œโ”€โ”€ c6
โ”‚   โ”‚   โ””โ”€โ”€ b9e95b39b8cd8ead8bbf4b118104741017de1b
โ”‚   โ”œโ”€โ”€ cc
โ”‚   โ”‚   โ””โ”€โ”€ f88a6f1649213499841c33f9bb36d1d8756fb7
โ”‚   โ”œโ”€โ”€ f3
โ”‚   โ”‚   โ””โ”€โ”€ 954314c1026028e77ea3a765aadefa67b45195
โ”‚   โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ pack
โ””โ”€โ”€ refs
    โ”œโ”€โ”€ heads
    โ”‚   โ””โ”€โ”€ master
    โ””โ”€โ”€ tags
        โ””โ”€โ”€ v0.0.1

19 directories, 29 files

ๆŸฅ็œ‹ไธ€ไธ‹ master ไธŠ็š„ๆไบคๆ—ฅๅฟ—๏ผŒๅˆšๅˆšๆไบคๅ†…ๅฎนๅœจๆ–ฐ็š„ไธ€่กŒ๏ผŒไธŽ้ฆ–ๆฌกๆไบค็จๅพฎๆœ‰็‚นๅทฎๅˆซ๏ผŒ้ฆ–ๆฌกๆไบคๆ˜ฏ commit (initial)ใ€‚

่ฟ˜ๅฏไปฅๅ‘็Žฐ็ฌฌไบŒๆฌกๆไบค็š„็ฌฌไธ€ๅˆ—ๅ’Œ็ฌฌไธ€ๆฌกๆไบค็š„็ฌฌไบŒๅˆ—ไธ€ๆ ท๏ผŒๅฏไปฅ็Œœๅˆฐ๏ผŒ็ฌฌไธ€ๅˆ—ๆŒ‡ๅ‘ไธŠไธ€ๆฌก็š„ๆไบคๅฏน่ฑกใ€‚

$ cat .git/logs/refs/heads/master
0000000000000000000000000000000000000000 033fa1ab71f0d54f348f07a3a0ffcefd52804df5 smile<3293172751nss@gmail.com> 1527521894 +0800	commit (initial): First Commmit
033fa1ab71f0d54f348f07a3a0ffcefd52804df5 28baf4f77fb49abf99c18bc1c12363d898f3ced7 smile<3293172751nss@gmail.com> 1527524452 +0800	commit: add CHANGELOG.md and CONTRIBUTING.md files

ๆŸฅ็œ‹ 28ba

$ git cat-file -p 28ba
tree 2caffd90cd736e58f516e3988e3af84f5fa42b4f
parent 033fa1ab71f0d54f348f07a3a0ffcefd52804df5
author smile<3293172751nss@gmail.com> 1527524452 +0800
committer smile<3293172751nss@gmail.com> 1527524452 +0800

add CHANGELOG.md and CONTRIBUTING.md files

็›ธๆฏ” 033f๏ผŒ28ba ๅคšไบ† parent ๅญ—ๆฎต ไธ” parent ๅญ—ๆฎตๅ€ผๆ˜ฏ 033f

ๅŒๆ—ถ master ไนŸๆŒ‡ๅ‘ไบ†ๆ–ฐ็š„ๆไบคๅฏน่ฑกใ€‚

็ฌฌไธ€ๆฌกไบง็”Ÿ็š„ๆไบคๅฏน่ฑกๅŒๆ ทๅญ˜ๅœจไบŽ็›ฎๅฝ•ๅฝ“ไธญใ€‚

$ cat .git/refs/heads/master
28baf4f77fb49abf99c18bc1c12363d898f3ced7

ๅœจ็œ‹ๆ ‘ๅฏน่ฑก 2caf๏ผŒๅ‘็Žฐ็›ธๆฏ”ไน‹ๅ‰๏ผŒๅคšไบ†ไธค่กŒ๏ผŒๅˆ†ๅˆซๆŒ‡ๅ‘ๆ–ฐๅขžๅŠ ็š„ๆ–‡ไปถใ€‚

README.md ๆ–‡ไปถๅ‡บ็Žฐๅœจไบ† 2caf ๅฏน่ฑกไธญ๏ผŒๅฎž้™…ไธŠ๏ผŒๅฎƒๅŒๆ—ถ่ฟ˜ๅญ˜ๅœจไบŽ c106 ๅฏน่ฑกไธญใ€‚

$ git cat-file -p 2caf
100644 blob a0cf709bc0991b5340080f944d02894dc1596d46	CHANGELOG.md
100644 blob c6b9e95b39b8cd8ead8bbf4b118104741017de1b	CONTRIBUTING.md
100644 blob f3954314c1026028e77ea3a765aadefa67b45195	README.md
$ git cat-file -p c106
100644 blob f3954314c1026028e77ea3a765aadefa67b45195	README.md

ๅˆฐ็Žฐๅœจไธบๆญข๏ผŒๆ•ดไธช็›ฎๅฝ•ไธ‹ๆœ‰ 3 ไธชๆ–‡ไปถ๏ผŒ่€Œ .git ็›ฎๅฝ•ไธ‹ๅทฒ็ปๆœ‰ๅคšไธชๆ–‡ไปถ๏ผŒไธบไบ†่ทŸ่ธช่ฎฐๅฝ•็‰ˆๆœฌใ€‚

$ ls
CHANGELOG.md CONTRIBUTING.md README.md

้€š่ฟ‡ไปฅไธŠ .git ็›ฎๅฝ•ๅ˜ๅŒ–๏ผŒๅฏไปฅๅ‘็Žฐ๏ผš

ๆฏๆฌกๆไบค้ƒฝไผšไบงๅ‡บไธ€ commit ๅฏน่ฑก๏ผŒ่ฟ™ไบ› commit ้€š่ฟ‡ parent๏ผŒๅฝขๆˆไธ€ไธช็”ฑ้ซ˜็‰ˆๆœฌๅˆฐไฝŽ็‰ˆๆœฌ็š„้“พ่กจ๏ผŒ่ฟฝๆบฏ่ฟ™ไธช้“พ่กจ๏ผŒๅฏไปฅๅ›žๆบฏๅˆฐไปปๆ„็‰ˆๆœฌใ€‚

commit ๅฏน่ฑกไฟๅญ˜ไธ€ไธช tree ็š„ๆ น่Š‚็‚น๏ผŒๆ น่Š‚็‚นไธ‹้ขๅ†ๅŒ…ๅซ blob ๆˆ– tree๏ผŒ็ฑปไผผๆ™ฎ้€šๆ–‡ไปถ็ณป็ปŸ็ป“ๆž„๏ผŒๅ’ŒไธŠ้ข็š„ๅ›พไธ€่‡ด๏ผŒไปŽๆ น่Š‚็‚นๅผ€ๅง‹๏ผŒๅฏไปฅๆ‰พๅˆฐๆŸไธ€่ˆฌ็‰ˆๆœฌไธ‹็š„ๆ‰€ๆœ‰ๆ–‡ไปถใ€‚

ๅœจๆฏไธ€้ข—ๆ ‘ไธ‹๏ผŒๅ› ไธบ้ƒฝๆ˜ฏไฝฟ็”จ็ฑปไผผๆŒ‡้’ˆ็š„็ป“ๆž„๏ผŒๆ‰€ไปฅๆฏๆฌกไฟฎๆ”น้ƒฝๆ˜ฏๅฐ†ๅ˜ๅŒ–็š„ๆ–‡ไปถ๏ผŒ้‡ๆ–ฐๅˆ›ๅปบไธ€ไธช blob ๆ–‡ไปถ๏ผŒๅนถไฟฎๆ”น็›ธๅบ”ๆŒ‡้’ˆใ€‚

็›ฎๅฝ•ไธญ็š„ .git/refs/heads/master ๆŒ‡ๅ‘ๆŸไธ€ๆฌกๆไบค๏ผŒๅฝ“็”ฑๅฆๅค–ไธ€ไธชๅˆ†ๆ”ฏ็š„ๆ—ถๅ€™๏ผŒไผšๆœ‰ .git/refs/heads/branch-xxx ๆ–‡ไปถๆŒ‡ๅ‘ๅฆๅค–ไธ€ๆฌกๆไบค๏ผŒ่€Œๅˆๅง‹ๆ—ถไธŽ็ˆถๅˆ†ๆ”ฏๆŒ‡ๅ‘็›ธๅŒใ€‚

ๅ†ๆทปๅŠ ไธ€ไธชๅธฆๆœ‰็›ฎๅฝ•ๆ–‡ไปถ

$ mkdir lib

$ echo "// Author: liuyanjie" > ./lib/index.js

$ git add lib/index.js

$ git commit -m "add lib/index.js" lib/index.js
[master 2b9fc85] add lib/index.js
 1 file changed, 1 insertion(+)
 create mode 100644 lib/index.js
$ git cat-file -p 2b9fc85
tree 9609811e44367d44f2915435f4454716e1e535fd
parent 28baf4f77fb49abf99c18bc1c12363d898f3ced7
author smile<3293172751nss@gmail.com> 1527556745 +0800
committer smile<3293172751nss@gmail.com> 1527556745 +0800

add lib/index.js
$ git cat-file -p 9609
100644 blob a0cf709bc0991b5340080f944d02894dc1596d46	CHANGELOG.md
100644 blob c6b9e95b39b8cd8ead8bbf4b118104741017de1b	CONTRIBUTING.md
100644 blob f3954314c1026028e77ea3a765aadefa67b45195	README.md
040000 tree 2fb9045bb558889ea2bd8cc5d8fe45e7247706da	lib
$ git cat-file -p 2fb9
100644 blob 39a204af28de9b4f0411735e597e0da7416ca35a	index.js

ไธŠ้ข่ฟž็ปญๅ‡ ๆญฅๅ’Œไน‹ๅ‰็š„ๆ•ˆๆžœไธ€ๆ ท๏ผŒไฝ†ๆ˜ฏๅฏไปฅ็œ‹ๅˆฐ๏ผŒๅœจๆ ‘ๅฏน่ฑก 9609 ไธญ๏ผŒๅŒ…ๅซไบ†ๅฆไธ€ไธชๆ ‘ๅฏน่ฑก 2fb9 ๏ผŒ่ฟ™ไธชๅฏน่ฑก็š„ๅ†…ๅฎนๆŒ‡ๅ‘ index.js ๆ–‡ไปถใ€‚

$ cat .git/logs/refs/heads/master
0000000000000000000000000000000000000000 033fa1ab71f0d54f348f07a3a0ffcefd52804df5 smile<3293172751nss@gmail.com> 1527521894 +0800	commit (initial): First Commmit
033fa1ab71f0d54f348f07a3a0ffcefd52804df5 28baf4f77fb49abf99c18bc1c12363d898f3ced7 smile<3293172751nss@gmail.com> 1527524452 +0800	commit: add CHANGELOG.md and CONTRIBUTING.md files
28baf4f77fb49abf99c18bc1c12363d898f3ced7 2b9fc8524bac21d5d5c2f988b5793315ce93abc6 smile<3293172751nss@gmail.com> 1527556745 +0800	commit: add lib/index.js

git log๏ผš

commit 2b9fc8524bac21d5d5c2f988b5793315ce93abc6 (HEAD -> master)
Author: smile<3293172751nss@gmail.com>
Date:   Tue May 29 09:19:05 2022 +0800

    add lib/index.js

commit 28baf4f77fb49abf99c18bc1c12363d898f3ced7
Author: smile<3293172751nss@gmail.com>
Date:   Tue May 29 00:20:52 2022 +0800

    add CHANGELOG.md and CONTRIBUTING.md files

commit 033fa1ab71f0d54f348f07a3a0ffcefd52804df5 (tag: v0.0.1)
Author: smile<3293172751nss@gmail.com>
Date:   Mon May 28 23:38:14 2022 +0800

    First Commmit

ๅผ€ๅง‹ๅˆ›ๅปบๅˆ†ๆ”ฏ

ๅˆ›ๅปบๅนถๅˆ‡ๆขๅˆฐๅˆ†ๆ”ฏ feature-a

$ git branch -v

* master 2b9fc85 add lib/index.js

$ git checkout -b feature-a
Switched to a new branch 'feature-a'

# liuyanjie @ bmw in ~/git-obj-model on git:feature-a o [9:25:01]
$ git branch -v

* feature-a 2b9fc85 add lib/index.js
  master    2b9fc85 add lib/index.js

$ git status
On branch feature-a
nothing to commit, working tree clean
$ tree .git
.git
โ”œโ”€โ”€ COMMIT_EDITMSG
โ”œโ”€โ”€ HEAD
โ”œโ”€โ”€ config
โ”œโ”€โ”€ description
โ”œโ”€โ”€ index
โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ exclude
โ”œโ”€โ”€ logs
โ”‚   โ”œโ”€โ”€ HEAD
โ”‚   โ””โ”€โ”€ refs
โ”‚       โ””โ”€โ”€ heads
โ”‚           โ”œโ”€โ”€ feature-a
โ”‚           โ””โ”€โ”€ master
โ”œโ”€โ”€ objects
โ”‚   โ”œโ”€โ”€ 03
โ”‚   โ”‚   โ””โ”€โ”€ 3fa1ab71f0d54f348f07a3a0ffcefd52804df5
โ”‚   โ”œโ”€โ”€ 28
โ”‚   โ”‚   โ””โ”€โ”€ baf4f77fb49abf99c18bc1c12363d898f3ced7
โ”‚   โ”œโ”€โ”€ 2b
โ”‚   โ”‚   โ””โ”€โ”€ 9fc8524bac21d5d5c2f988b5793315ce93abc6
โ”‚   โ”œโ”€โ”€ 2c
โ”‚   โ”‚   โ””โ”€โ”€ affd90cd736e58f516e3988e3af84f5fa42b4f
โ”‚   โ”œโ”€โ”€ 2f
โ”‚   โ”‚   โ””โ”€โ”€ b9045bb558889ea2bd8cc5d8fe45e7247706da
โ”‚   โ”œโ”€โ”€ 39
โ”‚   โ”‚   โ””โ”€โ”€ a204af28de9b4f0411735e597e0da7416ca35a
โ”‚   โ”œโ”€โ”€ 96
โ”‚   โ”‚   โ””โ”€โ”€ 09811e44367d44f2915435f4454716e1e535fd
โ”‚   โ”œโ”€โ”€ a0
โ”‚   โ”‚   โ””โ”€โ”€ cf709bc0991b5340080f944d02894dc1596d46
โ”‚   โ”œโ”€โ”€ c1
โ”‚   โ”‚   โ””โ”€โ”€ 067ba0a7ba51f937518c9bc051ea744ca748fe
โ”‚   โ”œโ”€โ”€ c6
โ”‚   โ”‚   โ””โ”€โ”€ b9e95b39b8cd8ead8bbf4b118104741017de1b
โ”‚   โ”œโ”€โ”€ cc
โ”‚   โ”‚   โ””โ”€โ”€ f88a6f1649213499841c33f9bb36d1d8756fb7
โ”‚   โ”œโ”€โ”€ f3
โ”‚   โ”‚   โ””โ”€โ”€ 954314c1026028e77ea3a765aadefa67b45195
โ”‚   โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ pack
โ””โ”€โ”€ refs
    โ”œโ”€โ”€ heads
    โ”‚   โ”œโ”€โ”€ feature-a
    โ”‚   โ””โ”€โ”€ master
    โ””โ”€โ”€ tags
        โ””โ”€โ”€ v0.0.1

23 directories, 35 files

็œ‹ไธ€ไธ‹.git ๆ–‡ไปถๅ†…ๅฎน๏ผŒๅฏไปฅ็œ‹ๅˆฐ.git/refs/heads ็›ฎๅฝ•ไธ‹ๅคšไบ†ไธช feature-a

ๆŸฅ็œ‹ไธ€ไธ‹ feature-a ็š„็›ธๅ…ณๅ†…ๅฎน๏ผŒๆŒ‡ๅ‘็š„ๆไบคๅฏน่ฑกๅ’Œ master ไธ€ๆ ท๏ผŒๅนถๆŒ‡ๆ˜Ž Created from HEADใ€‚

ไปŽๅ†…ๅฎนไธญๅฏไปฅ็œ‹ๅ‡บ๏ผŒไธคไธชๅˆ†ๆ”ฏๆŒ‡ๅ‘ๅŒไธ€ไธชๆไบคๅฏน่ฑก 1ad0e5๏ผŒไฝ†ๆ˜ฏไธคไธชๅˆ†ๆ”ฏ็š„ๆ—ฅๅฟ—ไธๅŒใ€‚

ๆ—ฅๅฟ—่ฎฐๅฝ•ไบ†ๅˆ†ๆ”ฏ็š„ๅކๅฒ๏ผŒ่€Œๆไบคๅฏน่ฑก่ฎฐๅฝ•ไบ†ๅˆ†ๆ”ฏ็š„ๆ•ฐๆฎๅ†…ๅฎนๅ’Œๆ‰€ๆœ‰ๅˆ†ๆ”ฏ็š„ๅކๅฒใ€‚

$ cat .git/refs/heads/feature-a
2b9fc8524bac21d5d5c2f988b5793315ce93abc6

$ cat .git/refs/heads/master
2b9fc8524bac21d5d5c2f988b5793315ce93abc6
$ cat .git/logs/refs/heads/feature-a
0000000000000000000000000000000000000000 2b9fc8524bac21d5d5c2f988b5793315ce93abc6 smile<3293172751nss@gmail.com> 1527557101 +0800	branch: Created from HEAD

$ cat .git/logs/refs/heads/master
0000000000000000000000000000000000000000 033fa1ab71f0d54f348f07a3a0ffcefd52804df5 smile<3293172751nss@gmail.com> 1527521894 +0800	commit (initial): First Commmit
033fa1ab71f0d54f348f07a3a0ffcefd52804df5 28baf4f77fb49abf99c18bc1c12363d898f3ced7 smile<3293172751nss@gmail.com> 1527524452 +0800	commit: add CHANGELOG.md and CONTRIBUTING.md files
28baf4f77fb49abf99c18bc1c12363d898f3ced7 2b9fc8524bac21d5d5c2f988b5793315ce93abc6 smile<3293172751nss@gmail.com> 1527556745 +0800	commit: add lib/index.js

ๅˆๅง‹ๅŒ– package.json

$ npm init
Is this ok? (yes)

ๅฎ‰่ฃ… bluebird

$ npm install bluebird --save
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN git-obj-model@1.0.0 No description
npm WARN git-obj-model@1.0.0 No repository field.

+ bluebird@3.5.1
added 1 package in 1.999s

ๆทปๅŠ ๆ–‡ไปถๅˆฐ็‰ˆๆœฌๅบ“๏ผŒๅนถๆŸฅ็œ‹ๅ˜ๅŒ–ใ€‚

$ git add package.json

$ cat .git/refs/heads/feature-a
2b9fc8524bac21d5d5c2f988b5793315ce93abc6

$ cat .git/refs/heads/master
2b9fc8524bac21d5d5c2f988b5793315ce93abc6

ๆไบคๆ–‡ไปถๅˆฐ็‰ˆๆœฌๅบ“๏ผŒๅนถๆŸฅ็œ‹ๅ˜ๅŒ–๏ผŒๆไบคๆŒ‡้’ˆๅทฒ็ปๆŒ‡ๅ‘ๆ–ฐ็š„ๆไบคๅฏน่ฑก๏ผŒๅˆ†ๆ”ฏ็š„็‰ˆๆœฌ่ถ…ๅ‰ไบŽ master๏ผŒๅ› ไธบ parent ๆŒ‡ๅ‘ 1ad0e5

$ git commit package.json -m 'add package.json'
[feature-a 74ce192] add package.json
 1 file changed, 17 insertions(+)
 create mode 100644 package.json

$ cat .git/refs/heads/master
2b9fc8524bac21d5d5c2f988b5793315ce93abc6

$ cat .git/refs/heads/feature-a
74ce19245be785772b33e1193df0d2c6a940ed10

$ git cat-file -p 74ce
tree 9d23f8ad2ecc9f8e49d78174bcc6e4668ca7f031
parent 2b9fc8524bac21d5d5c2f988b5793315ce93abc6
author smile<3293172751nss@gmail.com> 1527557656 +0800
committer smile<3293172751nss@gmail.com> 1527557656 +0800

add package.json

$ git cat-file -p 9d23
100644 blob a0cf709bc0991b5340080f944d02894dc1596d46	CHANGELOG.md
100644 blob c6b9e95b39b8cd8ead8bbf4b118104741017de1b	CONTRIBUTING.md
100644 blob f3954314c1026028e77ea3a765aadefa67b45195	README.md
040000 tree 2fb9045bb558889ea2bd8cc5d8fe45e7247706da	lib
100644 blob 5ee275ce022007c38d187c58aef13f8d9e04b553	package.json

ๅˆๅนถๅˆ†ๆ”ฏ feature-a ๅˆฐ master ๅˆ†ๆ”ฏ๏ผŒๅฏไปฅ็œ‹ๅˆฐ master ๅˆ†ๆ”ฏ่ทŸไธŠไบ† feature-a๏ผŒๅชๆ”นๆŒ‡้’ˆๆ—ขๅฏ๏ผŒ้žๅธธๅฟซใ€‚

$ git checkout master
Switched to branch 'master'

$ git merge feature-a --no-ff
Merge made by the 'recursive' strategy.
 package.json | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 package.json

$ cat .git/refs/heads/master
b98c36254dba6e169429c2be57b1bbeccb6e1f28

$ cat .git/refs/heads/feature-a
74ce19245be785772b33e1193df0d2c6a940ed10
$ tig

2022-05-29 09:37 liuyanjie Mโ”€โ” [master] Merge branch 'feature-a'
2022-05-29 09:34 liuyanjie โ”‚ o [feature-a] add package.json
2022-05-29 09:19 liuyanjie oโ”€โ”˜ add lib/index.js
2022-05-29 00:20 liuyanjie o add CHANGELOG.md and CONTRIBUTING.md files
2022-05-28 23:38 liuyanjie I <v0.0.1> First Commmit

ไฟฎๆ”น master ๅˆ†ๆ”ฏ๏ผŒ็ผ–่พ‘ๆ–‡ไปถๅนถๆไบค

$ git checkout master
Already on 'master'

$ echo -e "\n\n# About" >> README.md

$ git commit README.md -m "add About Me"
[master cc52745] add About Me
 1 file changed, 4 insertions(+)

$ cat README.md
# Readme


# About

ไฟฎๆ”น feature-a ๅˆ†ๆ”ฏ

$ git checkout feature-a
Switched to branch 'feature-a'

$ cat README.md
# Readme

$ echo -e "\n\n# About" >> README.md

$ cat README.md
# Readme


# About

$ git add README.md

$ git commit README.md -m "add About Me"
[feature-a fd885cf] add About Me
 1 file changed, 3 insertions(+)

ๆŸฅ็œ‹ๅˆ†ๆ”ฏๅคดๅ’Œๅކๅฒ่ฎฐๅฝ•๏ผŒๅฏไปฅ็œ‹ๅˆฐๅˆ†ๆ”ฏๅคดๆŒ‡ๅ‘ไธๅŒ็š„ๆไบคๅฏน่ฑก๏ผŒ่€Œๆไบคๅฏน่ฑก๏ผŒๅˆๆฅๆบไบŽๅŒไธ€ไธชๆไบคๅฏน่ฑก 0cb214741c044af3fb4677fe72e3ae175f3e0358๏ผŒไธคไธชๅˆ†ๆ”ฏไน‹้—ดๅญ˜ๅœจไบคๅ‰ใ€‚

$ cat .git/refs/heads/feature-a
74ce19245be785772b33e1193df0d2c6a940ed10

$ cat .git/refs/heads/master
cc52745b13b00c672c7ac9b1dc42336953293b7a

$ cat .git/logs/refs/heads/feature-a
0000000000000000000000000000000000000000 2b9fc8524bac21d5d5c2f988b5793315ce93abc6 smile<3293172751nss@gmail.com> 1527557101 +0800	branch: Created from HEAD
2b9fc8524bac21d5d5c2f988b5793315ce93abc6 74ce19245be785772b33e1193df0d2c6a940ed10 smile<3293172751nss@gmail.com> 1527557656 +0800	commit: add package.json
74ce19245be785772b33e1193df0d2c6a940ed10 fd885cfcd548a24fabb2f5b49ea60beadc8c5912 smile<3293172751nss@gmail.com> 1527558668 +0800	commit: add About Me

$ cat .git/logs/refs/heads/master
0000000000000000000000000000000000000000 033fa1ab71f0d54f348f07a3a0ffcefd52804df5 smile<3293172751nss@gmail.com> 1527521894 +0800	commit (initial): First Commmit
033fa1ab71f0d54f348f07a3a0ffcefd52804df5 28baf4f77fb49abf99c18bc1c12363d898f3ced7 smile<3293172751nss@gmail.com> 1527524452 +0800	commit: add CHANGELOG.md and CONTRIBUTING.md files
28baf4f77fb49abf99c18bc1c12363d898f3ced7 2b9fc8524bac21d5d5c2f988b5793315ce93abc6 smile<3293172751nss@gmail.com> 1527556745 +0800	commit: add lib/index.js
2b9fc8524bac21d5d5c2f988b5793315ce93abc6 b98c36254dba6e169429c2be57b1bbeccb6e1f28 smile<3293172751nss@gmail.com> 1527557853 +0800	merge feature-a: Merge made by the 'recursive' strategy.
b98c36254dba6e169429c2be57b1bbeccb6e1f28 cc52745b13b00c672c7ac9b1dc42336953293b7a smile<3293172751nss@gmail.com> 1527558514 +0800	commit: add About Me

ๅˆ‡ๆขๅˆฐ master ๅˆ†ๆ”ฏ๏ผŒๅ†ๆฌกๅˆๅนถ feature-a ๅˆฐ master

$ git checkout master
Switched to branch 'master'

$ git merge feature-a
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

$ cat README.md
# Readme


<<<<<<< HEAD
## About

=======
## About
>>>>>>> feature-a

่งฃๅ†ณๅ†ฒ็ชไน‹ๅŽ็š„ๆ–‡ไปถ

$ cat README.md
# Readme


## About
$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)

	both modified:   README.md
$ git commit README.md -m 'fix conflict'
fatal: cannot do a partial commit during a merge.

$ git commit -a
[master 5a68c74] Merge branch 'feature-a'
$ cat .git/refs/heads/feature-a
fd885cfcd548a24fabb2f5b49ea60beadc8c5912

$ cat .git/refs/heads/master
5a68c7402c30ae44fd82dadba2d8f148efb75541
$ cat .git/logs/refs/heads/master
0000000000000000000000000000000000000000 033fa1ab71f0d54f348f07a3a0ffcefd52804df5 smile<3293172751nss@gmail.com> 1527521894 +0800	commit (initial): First Commmit
033fa1ab71f0d54f348f07a3a0ffcefd52804df5 28baf4f77fb49abf99c18bc1c12363d898f3ced7 smile<3293172751nss@gmail.com> 1527524452 +0800	commit: add CHANGELOG.md and CONTRIBUTING.md files
28baf4f77fb49abf99c18bc1c12363d898f3ced7 2b9fc8524bac21d5d5c2f988b5793315ce93abc6 smile<3293172751nss@gmail.com> 1527556745 +0800	commit: add lib/index.js
2b9fc8524bac21d5d5c2f988b5793315ce93abc6 b98c36254dba6e169429c2be57b1bbeccb6e1f28 smile<3293172751nss@gmail.com> 1527557853 +0800	merge feature-a: Merge made by the 'recursive' strategy.
b98c36254dba6e169429c2be57b1bbeccb6e1f28 cc52745b13b00c672c7ac9b1dc42336953293b7a smile<3293172751nss@gmail.com> 1527558514 +0800	commit: add About Me
cc52745b13b00c672c7ac9b1dc42336953293b7a 5a68c7402c30ae44fd82dadba2d8f148efb75541 smile<3293172751nss@gmail.com> 1527559277 +0800	commit (merge): Merge branch 'feature-a'
$ git merge --stat feature-a
Already up to date.

$ git branch -d feature-a
Deleted branch feature-a (was fd885cf).

$ git branch

$ git cat-file -p fd88
tree 82e47e13f87031cab7c47b455744bc4ed3fdba3c
parent 74ce19245be785772b33e1193df0d2c6a940ed10
author smile<3293172751nss@gmail.com> 1527558668 +0800
committer smile<3293172751nss@gmail.com> 1527558668 +0800

add About Me

$ git cat-file -p 5a68
tree 42564bab966d59e3501a1903c1cb2066adc2bd2d
parent cc52745b13b00c672c7ac9b1dc42336953293b7a
parent fd885cfcd548a24fabb2f5b49ea60beadc8c5912
author smile<3293172751nss@gmail.com> 1527559277 +0800
committer smile<3293172751nss@gmail.com> 1527559277 +0800

Merge branch 'feature-a'
$ git log --graph --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
*   5a68c74 - (HEAD -> master) Merge branch 'feature-a' (7 minutes ago) <liuyanjie>
|\
| * fd885cf - add About Me (17 minutes ago) <liuyanjie>
* | cc52745 - add About Me (20 minutes ago) <liuyanjie>
* |   b98c362 - Merge branch 'feature-a' (31 minutes ago) <liuyanjie>
|\ \
| |/
| * 74ce192 - add package.json (34 minutes ago) <liuyanjie>
|/
* 2b9fc85 - add lib/index.js (49 minutes ago) <liuyanjie>
* 28baf4f - add CHANGELOG.md and CONTRIBUTING.md files (10 hours ago) <liuyanjie>
* 033fa1a - (tag: v0.0.1) First Commmit (11 hours ago) <liuyanjie>

้…็ฝฎๅ‘ฝไปคๅˆซๅ

$ git config --global alias.lg "log --graph --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
git lg

ๆ‰“ๆ ‡็ญพ

$ git tag -a v0.0.2 -m "v0.0.2"
v0.0.1
v0.0.2

$ cat .git/refs/tags/v0.0.2
174c530154ab3b4d4d322bcbd66cdde18882eb00

$ git cat-file -p 174c
object 5a68c7402c30ae44fd82dadba2d8f148efb75541
type commit
tag v0.0.2
tagger smile<3293172751nss@gmail.com> 1527559851 +0800

v0.0.2

$ git cat-file -p 5a68
tree 42564bab966d59e3501a1903c1cb2066adc2bd2d
parent cc52745b13b00c672c7ac9b1dc42336953293b7a
parent fd885cfcd548a24fabb2f5b49ea60beadc8c5912
author smile<3293172751nss@gmail.com> 1527559277 +0800
committer smile<3293172751nss@gmail.com> 1527559277 +0800

Merge branch 'feature-a'
$ tree .git
.git
โ”œโ”€โ”€ COMMIT_EDITMSG
โ”œโ”€โ”€ HEAD
โ”œโ”€โ”€ ORIG_HEAD
โ”œโ”€โ”€ co.gitup.mac
โ”‚   โ”œโ”€โ”€ cache.db
โ”‚   โ”œโ”€โ”€ info.plist
โ”‚   โ””โ”€โ”€ snapshots.data
โ”œโ”€โ”€ config
โ”œโ”€โ”€ description
โ”œโ”€โ”€ hooks
โ”‚   โ”œโ”€โ”€ applypatch-msg.sample
โ”‚   โ”œโ”€โ”€ commit-msg.sample
โ”‚   โ”œโ”€โ”€ fsmonitor-watchman.sample
โ”‚   โ”œโ”€โ”€ post-update.sample
โ”‚   โ”œโ”€โ”€ pre-applypatch.sample
โ”‚   โ”œโ”€โ”€ pre-commit.sample
โ”‚   โ”œโ”€โ”€ pre-push.sample
โ”‚   โ”œโ”€โ”€ pre-rebase.sample
โ”‚   โ”œโ”€โ”€ pre-receive.sample
โ”‚   โ”œโ”€โ”€ prepare-commit-msg.sample
โ”‚   โ””โ”€โ”€ update.sample
โ”œโ”€โ”€ index
โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ exclude
โ”œโ”€โ”€ logs
โ”‚   โ”œโ”€โ”€ HEAD
โ”‚   โ””โ”€โ”€ refs
โ”‚       โ””โ”€โ”€ heads
โ”‚           โ””โ”€โ”€ master
โ”œโ”€โ”€ objects
โ”‚   โ”œโ”€โ”€ 03
โ”‚   โ”‚   โ””โ”€โ”€ 3fa1ab71f0d54f348f07a3a0ffcefd52804df5
โ”‚   โ”œโ”€โ”€ 17
โ”‚   โ”‚   โ””โ”€โ”€ 4c530154ab3b4d4d322bcbd66cdde18882eb00
โ”‚   โ”œโ”€โ”€ 28
โ”‚   โ”‚   โ””โ”€โ”€ baf4f77fb49abf99c18bc1c12363d898f3ced7
โ”‚   โ”œโ”€โ”€ 2b
โ”‚   โ”‚   โ””โ”€โ”€ 9fc8524bac21d5d5c2f988b5793315ce93abc6
โ”‚   โ”œโ”€โ”€ 2c
โ”‚   โ”‚   โ””โ”€โ”€ affd90cd736e58f516e3988e3af84f5fa42b4f
โ”‚   โ”œโ”€โ”€ 2f
โ”‚   โ”‚   โ””โ”€โ”€ b9045bb558889ea2bd8cc5d8fe45e7247706da
โ”‚   โ”œโ”€โ”€ 30
โ”‚   โ”‚   โ””โ”€โ”€ be8054b61a4a124e4cd8a1201de8474cb45e12
โ”‚   โ”œโ”€โ”€ 39
โ”‚   โ”‚   โ””โ”€โ”€ a204af28de9b4f0411735e597e0da7416ca35a
โ”‚   โ”œโ”€โ”€ 42
โ”‚   โ”‚   โ””โ”€โ”€ 564bab966d59e3501a1903c1cb2066adc2bd2d
โ”‚   โ”œโ”€โ”€ 44
โ”‚   โ”‚   โ””โ”€โ”€ 2b821b9b4acb5b0e632042542b3b29e2cf721e
โ”‚   โ”œโ”€โ”€ 48
โ”‚   โ”‚   โ””โ”€โ”€ 1cab7467cdb697bf7affdba0f2a5673a03366d
โ”‚   โ”œโ”€โ”€ 5a
โ”‚   โ”‚   โ””โ”€โ”€ 68c7402c30ae44fd82dadba2d8f148efb75541
โ”‚   โ”œโ”€โ”€ 5e
โ”‚   โ”‚   โ””โ”€โ”€ e275ce022007c38d187c58aef13f8d9e04b553
โ”‚   โ”œโ”€โ”€ 74
โ”‚   โ”‚   โ””โ”€โ”€ ce19245be785772b33e1193df0d2c6a940ed10
โ”‚   โ”œโ”€โ”€ 82
โ”‚   โ”‚   โ””โ”€โ”€ e47e13f87031cab7c47b455744bc4ed3fdba3c
โ”‚   โ”œโ”€โ”€ 96
โ”‚   โ”‚   โ””โ”€โ”€ 09811e44367d44f2915435f4454716e1e535fd
โ”‚   โ”œโ”€โ”€ 9d
โ”‚   โ”‚   โ””โ”€โ”€ 23f8ad2ecc9f8e49d78174bcc6e4668ca7f031
โ”‚   โ”œโ”€โ”€ a0
โ”‚   โ”‚   โ””โ”€โ”€ cf709bc0991b5340080f944d02894dc1596d46
โ”‚   โ”œโ”€โ”€ b9
โ”‚   โ”‚   โ””โ”€โ”€ 8c36254dba6e169429c2be57b1bbeccb6e1f28
โ”‚   โ”œโ”€โ”€ c1
โ”‚   โ”‚   โ””โ”€โ”€ 067ba0a7ba51f937518c9bc051ea744ca748fe
โ”‚   โ”œโ”€โ”€ c6
โ”‚   โ”‚   โ””โ”€โ”€ b9e95b39b8cd8ead8bbf4b118104741017de1b
โ”‚   โ”œโ”€โ”€ cc
โ”‚   โ”‚   โ”œโ”€โ”€ 52745b13b00c672c7ac9b1dc42336953293b7a
โ”‚   โ”‚   โ””โ”€โ”€ f88a6f1649213499841c33f9bb36d1d8756fb7
โ”‚   โ”œโ”€โ”€ f3
โ”‚   โ”‚   โ””โ”€โ”€ 954314c1026028e77ea3a765aadefa67b45195
โ”‚   โ”œโ”€โ”€ fd
โ”‚   โ”‚   โ””โ”€โ”€ 885cfcd548a24fabb2f5b49ea60beadc8c5912
โ”‚   โ”œโ”€โ”€ info
โ”‚   โ””โ”€โ”€ pack
โ””โ”€โ”€ refs
    โ”œโ”€โ”€ heads
    โ”‚   โ””โ”€โ”€ master
    โ””โ”€โ”€ tags
        โ”œโ”€โ”€ v0.0.1
        โ””โ”€โ”€ v0.0.2

36 directories, 51 files

.git/HEAD ๆŒ‡ๆ˜Žไบ†ๅฝ“ๅ‰ๆดป่ทƒๅˆ†ๆ”ฏๆ˜ฏๅ“ชไธชๅˆ†ๆ”ฏ

$ cat .git/HEAD
ref: refs/heads/master

git-obj-model