我在哪里可以获得有关git stashing如何在内部工作的信息?我对git-scm书的9.2 Git Internals - Git Objects中关于git对象的详细解释感兴趣。
编辑: 我根据我从that link收到的信息更新了我的问题。 我的逻辑在下面描述的是正确的吗? HEAD位于分支br1上。该分支上的最后一次提交“br1-c0”具有以下树:
somefile.txt(里面的文字 - 'some text') anotherfile.txt
我修改了somefile.txt,将“更新的文本”作为文本内部。我收起了变化:
1)创建一个提交,其中包含以下树: somefile.txt(里面的文字 - '更新的文字') anotherfile.txt AND具有提交'br1-c0'和文件索引状态的链接。
2)工作树恢复为'br1-c0'提交。
答案 0 :(得分:4)
Git是开源的,所以源代码;)(或谷歌)
在任何情况下,stashes都是提交列表。您可以通过创建存储来查看它们的构造方式:
# 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),而其余两次提交是当前索引的保存(分阶段更改),并且合并包含未分级更改:
% 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
现在,stashes列表是一个现有结构 - reflog(n.b。useful structure on its own),名称是...... stash。因此,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