如何克隆旧的git-commit(还有一些关于git的问题)
我有大约20次提交的项目的git-repository。 我知道如何用git clone
实际的提交,
- 但我怎么能“克隆”一个旧的提交?
- 有没有一个非常好的git-GUI(imho
qgit
不是一个好的GUI)? - 什么是“分支”?
- 当我想释放0.1,0.2等等,在git中标记这些提交的最好方法是什么?
- svn有什么重大分歧?
一个git仓库始终包含所有的历史logging。
所以当你克隆一个版本库的时候,你要克隆它的完整历史, 然后你可以从你想要的任何提交中创build一个分支:
$ git checkout -b aNewBranch SHA1
SHA1表示您要继续执行的提交ID。
Git中的分支只是一种跟踪DAG(Directed Acyclic Graph ,有向无环图)的一条path的方法,它是一组代表Git仓库历史logging的提交。
这是一个仅仅指定给其中一个提交的指针,并且会随着每个新的提交一起移动。
有关更多信息,请参阅Pro Git书籍。
你可以用一个标签来标记一个特定的提交,就像一个分支一样,它只是一个指针,而不是一个不可变的指针(当你进行新的提交时它不会移动)。
您最好使用带注释的标签,将其作为完整对象存储在Git数据库中。 他们是校验和; 包含标记名称,电子邮件和date; 有一个标记消息; 并可以使用GNU隐私卫士(GPG)进行签名和validation。
Git Wiki上的InterfacesFrontendsAndTools页面的“Graphical Interfaces”部分列出了Git的各种GUI。
你会看到许多有关Git和SVN之间的区别的问题:例如,看我的答案 (或者这个 )。
关于Git和SVN的根本区别的最完整的答案是:
“哪个更好:git还是SVN” 。
在这篇文章中有几个问题,这里是我的一些答案:
首先,要“克隆”以前的提交,可以这样做:
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是最好的。
什么是分支机构? 用我自己的话来说,一个分支只是一个非常简单的方法。 假设你正在一个分支上工作,你想尝试一个实验。 简单的,只是git checkout -b experiment
,你很快就在一个安全的地方打破东西。
git和svn有什么不同?
git是一个分发版本控制系统 。 svn不是。 此外,分支(上面提到)在git中更容易。
对于标记,我不知道是否有“一个真正的方式”(是否曾经?),但只是探讨git tag
命令。 关于git的一个好处就是在本地计算机(或任何地方)克隆你的回购副本是多么的容易,而且可以做任何你想做的事情,看看会发生什么。 如果你搞砸了,只要删除目录。 所以,你可以在一些testing目录中试用git tag
,看看你喜欢什么。