【问题标题】:Concept of git tracking and git staginggit 跟踪和 git 分期的概念
【发布时间】:2011-09-27 06:04:02
【问题描述】:

当您修改工作目录中的文件时,git 会告诉您使用“git add”来暂存。

当你向工作目录添加新文件时,git 会告诉你使用“git add”开始跟踪。

我对这两个概念有点困惑,因为我认为跟踪文件的更改与暂存文件以进行提交是不同的

【问题讨论】:

    标签: git staging


    【解决方案1】:

    Git 本质上对本地仓库中的文件有 4 种主要状态:

    • 未跟踪: 文件是新文件,Git 对此一无所知。如果你git add <file>,就会变成:
    • staged: 现在 Git 知道文件(已跟踪),但也将其作为下一个提交批次的一部分(称为 index)。如果你git commit,就会变成:
    • 未更改:文件自上次提交后未更改。如果你修改它,它变成:
    • unstaged: 已修改但尚未成为下一次提交的一部分。您可以使用git add 再次上演它

    如您所见,git add跟踪未跟踪的文件,并暂存任何文件。

    另外:您可以使用git rm --cached filename 取消跟踪未提交的文件,并使用git reset HEAD <file> 取消暂存文件

    【讨论】:

      【解决方案2】:

      Git 有一个称为“索引”的概念。要创建一个新的提交,您需要在索引中填充您希望在下一次提交中拥有的内容。这意味着您必须使用 git add 明确告诉 Git 您希望在下一次提交中出现哪些更改。 (git add -p 只添加单个帅哥)

      无论您是只更新文件(»阶段更改«)还是添加新文件的全部内容(»开始跟踪文件«),这对 Git 都没有影响——这两次,所有 Git 的index sees 是增加了新的变化

      【讨论】:

      • 很好的解释。
      • 很好的解释。
      【解决方案3】:

      当您添加文件以开始跟踪时,它也会暂存其内容。

      如果你想添加一个文件进行跟踪而不暂存它,你可以使用

      git add -N
      

      【讨论】:

        【解决方案4】:

        您识别的两个git add 步骤本质上是相同的,只是由于它们的到达路线而有不同的解释。

        git add 只是告诉 git,提供的文件是您希望在其源代码控制存储库中以其当前形式(其内容)拥有的文件。此时 git 将拍摄文件的快照(并在其索引中保留一个注释),以便在您准备好并添加对文件的所有更改(即在暂存区域中编组在一起)时,它已准备好,因为你的git commit(带有适当的消息;-)。

        一旦 git 被告知该文件(例如 @avh 的 -N 选项),它会以各种命令(例如 git status)的名义注意到(跟踪)文件的更改。因此,稍后,您必须明确告诉 git 何时不再需要跟踪文件 (git rm <file>),并且在您拥有 added 将在犯罪。几乎很明显(或者可能不是),您可以在提交最终版本之前多次git add 一个文件。

        【讨论】:

          猜你喜欢
          • 2011-10-01
          • 2015-07-15
          • 1970-01-01
          • 2012-03-03
          • 2011-02-05
          • 1970-01-01
          • 2011-02-24
          • 2021-09-15
          • 1970-01-01
          相关资源
          最近更新 更多