如何在git中进行存储 - 内部

时间:2013-08-30 07:21:28

标签: git

我在哪里可以获得有关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'提交。

1 个答案:

答案 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