如何克隆旧的git-commit(以及有关git的更多问题)


75

我有约20次提交的git存储库。我知道如何克隆与实际承诺git clone

  • 但是我如何“克隆”旧的提交?
  • 是否有一个非常好的git-GUI(imhoqgit不是一个好的GUI)?
  • “分支机构”到底是什么?
  • 当我想发布0.1、0.2等时,在git中标记这些提交的最佳方法是什么?
  • svn和有什么不一样?

Answers:


129

git存储库始终包含所有历史记录。
因此,当您克隆存储库时,将使用其完整的历史记录对其进行克隆,然后,您可以从所需的任何提交中进行分支:

 $ git checkout -b aNewBranch SHA1

SHA1代表您要继续执行的提交ID。


Git中的分支只是一种跟踪DAG(有向非循环图)的路径的方法,该DAG是表示Git存储库历史的一组提交。
它只是您分配给其中一个提交的指针,并且它将随着每个新的提交而移动。

分行

有关更多信息,请参见Pro Git书。


您可以使用标记来标记特定的提交,该标记就像分支一样,仅仅是一个指针,但是是一个不变的指针(当您进行新的提交时,它不会移动)。
您最好使用带注释的标签,这些标签将作为完整对象存储在Git数据库中。它们是校验和;包含标记名称,电子邮件和日期;带有标记消息;并可以使用GNU Privacy Guard(GPG)进行签名和验证。


Git Wiki上InterfacesFrontendsAndTools页面的“图形界面”部分列出了当前Git的各种GUI。


您将看到许多有关Git和SVN区别的问题:例如,请参阅我的答案(或答案)。
关于Git和SVN之间的根本区别,我最完整的答案是:
“两者中哪个更好:git或SVN”


1
实际上,最后一个SO问题“两个中哪个更好:git或SVN”已被删除。我已将其复制到较旧的答案:stackoverflow.com/questions/161541/svn-vs-git/2549128#2549128
VonC 2010年

5
暂时在旧提交中四处浏览,而无需创建新分支:git checkout SHA1,以及以后如果您决定保留它:git checkout -b aNewBranch
rymo 2012年

7

这篇文章中有几个问题,这是我对一些答案的看法:

首先,要“克隆”先前的提交,您可以执行以下操作:

git clone REPO_URL
git checkout HEAD~1 // checks out the last commit's first parent

使用~1访问最后一次提交的第一父,并增加数量来获得父母的父母等。有关波浪号和插入符号的更多信息

上面的两个命令将使您处于分离的HEAD状态,根据上下文,该状态可能不重要。例如,克隆是作为部署脚本的一部分,而您关心的只是访问先前的提交(例如,作为回滚策略的一部分),这并不重要。

如果您需要从历史的这一点开始工作,可以运行

git checkout -b NEW_BRANCH_NAME

好的git GUI?对我来说SourceTree是最好的。

什么是分支机构?用我自己的话说,分支只是枢纽的一种非常简单的方法。假设您正在一个分支上工作,master并且想尝试一个实验。简单,公正git checkout -b experiment,您很快就可以安全地摔碎东西。

git和svn有什么区别?

git是一个分布式版本控制系统。svn不是。同样,分支(如上所述)在git中更容易。

对于标记,我不知道是否存在“一种真实的方式”(有没有?),而只是探索git tag命令。git的一大优点是,在本地计算机(或任何位置)上克隆仓库的副本并进行所需的操作,看看会发生什么是多么容易。如果您搞砸了,只需删除目录即可。因此,您可以git tag在一些测试目录中进行试验,看看自己喜欢什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.