我在哪里可以获得有关 git 存储在内部如何工作的信息?我对类似于 9.2 Git Internals - Git Objects 中关于 git 对象的详细解释很感兴趣。 git-scm 书。
编辑:
我正在根据从 that link 收到的信息更新我的问题.
我下面描述的逻辑是否正确?
HEAD 在分支 br1 上。该分支上的最后一次提交“br1-c0”具有以下树:
somefile.txt(里面的文字 - '一些文字') 另一个文件.txt
我修改了 somefile.txt 以将“更新文本”作为内部文本。我正在存储更改:
1) 创建了一个提交,它有以下树: somefile.txt(里面的文字 - '更新的文字') 另一个文件.txt 并且具有指向提交“br1-c0”和文件索引状态的链接。
2) 工作树恢复为“br1-c0”提交。
最佳答案
Git 是开源的,所以源代码 ;)(或谷歌)
在任何情况下,存储都是提交列表。你可以通过创建一个 stash 来查看它们是如何构建的:
# git stash --keep-index
# git stash list
stash@{0}: WIP on master: dafe337 sss
# git log 'stash@{0}' | cat
commit 7f86a90fb4e57590d6fe5026b7408306a757132a
Merge: dafe337 2881ede
Author: Maciej Piechotka <uzytkownik2@gmail.com>
Date: Fri Aug 30 09:27:10 2013 +0200
WIP on master: dafe337 sss
commit 2881ede55d619570a82bb7312257c4e43bd3b334
Author: Maciej Piechotka <uzytkownik2@gmail.com>
Date: Fri Aug 30 09:27:10 2013 +0200
index on master: dafe337 sss
commit dafe33716c2e5aee994612c88d8142f1163c624e
Author: Maciej Piechotka <uzytkownik2@gmail.com>
Date: Fri Aug 30 09:25:40 2013 +0200
sss
Sss 是第一个提交(HEAD),而其余两个提交是当前索引的保存(暂存更改)并且 merge 包含未暂存更改:
% git show 2881ede55d619570a82bb7312257c4e43bd3b334
commit 2881ede55d619570a82bb7312257c4e43bd3b334
Author: Maciej Piechotka <uzytkownik2@gmail.com>
Date: Fri Aug 30 09:27:10 2013 +0200
index on master: dafe337 sss
diff --git a/test.c b/test.c
index b9a1dd0..7beafd5 100644
--- a/test.c
+++ b/test.c
@@ -1 +1,2 @@
dddd
+fff
% git show 7f86a90fb4e57590d6fe5026b7408306a757132a
commit 7f86a90fb4e57590d6fe5026b7408306a757132a
Merge: dafe337 2881ede
Author: Maciej Piechotka <uzytkownik2@gmail.com>
Date: Fri Aug 30 09:27:10 2013 +0200
WIP on master: dafe337 sss
diff --cc test.c
index b9a1dd0,7beafd5..551a609
--- a/test.c
+++ b/test.c
@@@ -1,1 -1,2 +1,3 @@@
dddd
+ fff
++ggg
现在存储列表是一个现有结构 - reflog (注:useful structure on its own)名字是……藏起来。所以 stashes 实际上是作为一个带有移动头的分支实现的,我们感兴趣的是 reflog。为了让它更有趣,我创建了第二个存储,它创建了提交 0dee308c461955e13a864c9a904a69d611e82730
。
% git reflog stash | cat
7f86a90 stash@{0}: WIP on master: dafe337 sss
% cat .git/refs/stash
0dee308c461955e13a864c9a904a69d611e82730
% cat .git/logs/refs/stash
0000000000000000000000000000000000000000 7f86a90fb4e57590d6fe5026b7408306a757132a Maciej Piechotka <uzytkownik2@gmail.com> 1377847630 +0200 WIP on master: dafe337 sss
7f86a90fb4e57590d6fe5026b7408306a757132a 0dee308c461955e13a864c9a904a69d611e82730 Maciej Piechotka <uzytkownik2@gmail.com> 1377847983 +0200 WIP on master: dafe337 sss
关于git - stash 在 git 中是如何工作的 - 内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18527171/