使用git分支作为学术研究中过去实验的快照
我的基本问题是如何复制分支,但我在Stackoverflow上做了一些搜索,找不到适合我的目的的方法-所以请不要将我的问题标记为重复,因为我在这里寻求个性化建议 我正在和一个5人以上的小组进行一个研究项目。我们有一个共同的代码库(主分支)。出于我的目的,我需要为一个实验稍微修改公共代码库,所以我创建了一个分支并在那里完成了我的工作 现在,实验完成后,我想使用git分支作为学术研究中过去实验的快照,git,Git,我的基本问题是如何复制分支,但我在Stackoverflow上做了一些搜索,找不到适合我的目的的方法-所以请不要将我的问题标记为重复,因为我在这里寻求个性化建议 我正在和一个5人以上的小组进行一个研究项目。我们有一个共同的代码库(主分支)。出于我的目的,我需要为一个实验稍微修改公共代码库,所以我创建了一个分支并在那里完成了我的工作 现在,实验完成后,我想 保持分支的原样,而不重新合并(原因:其他人不需要我新添加的代码,我希望将来引用它) 创建此分支的副本(这是一个新分支)并在那里继续我的工作,以
最干净、最安全的方法是什么?我需要知道有什么暗示吗?非常感谢 创建分支,完成工作后: 这些标签有什么方便之处:
- 它们有一个作者和一条消息,您可以在其中存储实验摘要
- 它们无法更改(尽管您可以重新创建)
- 您可以保留当前的分支,并可以在那里开始新的实验
- 主数据或源快照:它保存Git在您(或任何人)提交时知道的所有文件的副本,并一直冻结;及
- 元数据,或关于提交本身的信息:它保存了诸如提交人和提交时间等信息,并一直处于冻结状态
1这里的主要例外是错误提交,它存储了一些巨大的数据文件,否则不会妨碍存储库的使用。只要你没有让它们逃出实验室,它们就很容易被清除,这样就不会有其他副本再次感染你的数据库。如果他们已经离开了,您必须开始注意您的Git存储库与哪些Git存储库发生了Git性关系 2当前,这是提交内容的SHA-1校验和,前面是单词
commit
、空格、对象大小的ASCII表示和ASCII NUL字节。有一个项目正在进行中,以转移到SHA-256,并使哈希算法更容易在未来更改,如果需要的话
如何将其转化为分支、标记等 理解分支和标记名的关键在于几个部分
- 首先,正如我们已经知道的,每个提交都有一个唯一的hash ID。我们可以进一步概括:所有Git对象都有唯一的hash ID,包括带注释的标记对象
- 其次,Git中的任何引用名称(如分支名称或标记名称)都包含一(1)个散列ID。分支名称被约束为仅包含提交哈希ID,而标记名称可以包含提交ID或带注释的标记对象ID
- 第三,各种Git对象持有散列ID。最重要的是,每个提交都包含一组早期提交哈希ID。大多数提交只有其中一个。带注释的标记对象中也有一个哈希ID,通常是提交哈希ID
... <-F <-G <-H
...--F--G--H <-- branch
如果我们创建了另一个分支名称,该名称也指向commitH
:
...--F--G--H <-- branch, develop
...--F--G--H <-- branch
\
I <-- develop (HEAD)
然后进行新提交I
,新提交I
将指向现有提交H
:
...--F--G--H <-- branch, develop
...--F--G--H <-- branch
\
I <-- develop (HEAD)
我们重新获得旧文件,同样重要的是,如果我们再次提交J
,它会导致名称分支
指向新提交:
J <-- branch (HEAD)
/
...--F--G--H
\
I <-- develop
在此模式下,如果进行新提交K
,则新提交K
为n
J <-- branch (HEAD)
/
...--F--G--H
\
I <-- develop
tag:foo
|
v
... [extra data]
|
v
J <-- branch (HEAD)
/
...--F--G--H
\
I <-- develop
tag:foo
|
v
... [extra data]
|
v
J <-- branch, HEAD
/
...--F--G--H
\
I <-- develop
tag:foo
|
v
... [extra data]
|
v
J <-- branch
/ \
...--F--G--H K <-- HEAD
\
I <-- develop
tag:foo
|
v
... [extra data]
|
v
J--L <-- branch (HEAD)
/ \
...--F--G--H K ???
\
I <-- develop