【问题标题】:how to clone an old git-commit (and some more questions about git)如何克隆一个旧的 git-commit(还有一些关于 git 的问题)
【发布时间】:2009-10-31 19:32:05
【问题描述】:

我有一个项目的 git 存储库,其中包含大约 20 个提交。我知道如何使用git clone 克隆实际提交,

  • 但是我怎样才能“克隆”一个旧的提交呢?
  • 是否有一个非常好的 git-GUI(恕我直言 qgit 不是一个好的 GUI)?
  • 究竟什么是“分支”?
  • 当我想发布 0.1、0.2 等时,在 git 中标记这些提交的最佳方法是什么?
  • 与 svn 的最大区别是什么?

【问题讨论】:

    标签: git


    【解决方案1】:

    一个 git 存储库始终包含所有历史记录。
    因此,当您克隆存储库时,您正在克隆它的完整历史记录,然后然后,您可以从任何您想要的提交中创建一个分支:

     $ git checkout -b aNewBranch SHA1
    

    使用 SHA1 表示您要继续的提交 ID。


    Git 中的分支只是跟踪 DAG (Directed Acyclic Graph) 的一个路径的一种方式,DAG (Directed Acyclic Graph) 是代表 Git 存储库历史的一组提交。
    它只是您分配给其中一个提交的指针,它会随着每个新提交而继续移动。

    更多信息请参见Pro Git book。


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


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


    您会看到很多关于 Git 和 SVN 之间区别的问题:例如,请参阅 my answer(或 this one)。
    关于 Git 和 SVN 之间根本区别的最完整答案在这里:
    "which of the two is better:git or SVN"

    【讨论】:

    • 其实最后一个SO问题“两者哪个更好:git或SVN”已被删除。我已将其复制到较旧的答案:stackoverflow.com/questions/161541/svn-vs-git/2549128#2549128
    • 暂时在旧提交中四处寻找而不创建新分支:git checkout SHA1,如果您决定保留它,稍后:git checkout -b aNewBranch
    【解决方案2】:

    这篇文章有几个问题,以下是我的一些答案:

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

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

    使用~1 访问最后一次提交的第一个父级,并增加数字以获取父级的父级,依此类推。 More on tilde and caret notation.

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

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

    git checkout -b NEW_BRANCH_NAME
    

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

    什么是分支?用我自己的话来说,分支只是一种非常简单的旋转方式。假设你在一个分支上工作,master,你想尝试一个实验。简单,只需git checkout -b experiment,您就可以快速在安全的地方破坏东西。

    git 和 svn 有什么不同?

    git 是一个distribute version control system。 svn 不是。此外,分支(上面提到的)在 git 中更容易。

    对于标记,我不知道是否有“One True Way”(有没有?),但只需探索git tag 命令。 git 的一大优点是在本地计算机(或任何地方)上克隆你的 repo 副本并做任何你想做的事情并看看会发生什么是多么容易。如果你搞砸了,只需删除目录。所以,你可以在某个测试目录中尝试git tag,看看你喜欢什么。

    【讨论】:

      猜你喜欢
      • 2012-02-20
      • 1970-01-01
      • 2011-03-08
      • 2013-10-03
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 2019-12-08
      • 2021-06-03
      相关资源
      最近更新 更多