【问题标题】:git commit will move/copy files from staging area to local branchgit commit 将文件从暂存区移动/复制到本地分支
【发布时间】:2018-08-27 17:30:01
【问题描述】:

我对暂存区有很多困惑。 首先Git Gud: The Working Tree, Staging Area, and Local Repo告诉我git commit 后暂存区是空的,这样git commit 可能会将文件移动到本地分支而不是复制。

但是这似乎无法解释这种做法:git reset --soft HEAD~ modifies staged snapshot?git reset --soft HEAD^git commit 之后,然后是 git status,似乎暂存区和 HEAD 之间存在差异^,区别在于HEAD^之后提交的文件。 这样一来,git commit 之后 staging area 似乎不是空的,或者说如果 staging area 是空的,如何解释当前 HEAD 和 staging area 的区别?


还有一个问题是命令

  git diff --cached

用来比较暂存区和HEAD的区别。而What does 'stage' mean in git? 告诉我暂存区只存储文件更改。例如我们 git clone 一个包含三个文件的项目:a.txt b.txt c.txt,我们修改了 c.txt 和 git add 它。然后我们执行命令git diff --cached。现在本地分支有三个文件,暂存区只有一个文件。为什么只显示c.txt的变化没有包含暂存区没有a.txt b.txt与本地分支相比的信息。


总之,我有两个问题:
1. git commit,将文件从暂存区移动或复制到本地分支时发生了什么?
2. git diff --cached 发生了什么?只比较暂存区包含的文件?

参考:

提交只是一个检查点,告诉 git 使用我们最后一次提交作为比较来跟踪到目前为止发生的所有更改。提交后,您的暂存区将是空的。 来自 Git Gud: The Working Tree, Staging Area, and Local Repo

【问题讨论】:

    标签: git


    【解决方案1】:

    许多文章松散地谈论阶段(或就此而言提交)是什么/它包含什么。也许这些作者中的一些人并不了解,或者他们只是认为他们的解释比更准确的解释更有用。不管是什么原因,请注意:

    如果有人告诉您索引包含更改,那是在误导您。

    索引包含项目的快照。 (通常。在冲突合并期间,它会稍微复杂一些。)如果有人说它“包含阶段性更改”,您应该了解它实际上包含一个快照已应用阶段性更改(相对到HEAD所指示的COMMIT对象)。

    所以在提交之后,阶段不是空的。确实没有分阶段的更改,因为 分阶段的任何内容都刚刚提交(并且HEAD 已移至新提交);但这意味着索引和HEAD 包含匹配的快照。

    【讨论】:

      【解决方案2】:

      暂存区包含您已指定为提交的一部分但尚未提交的更改。

      当您执行git add 时,更改会添加到暂存中,直到您实际运行git commit。暂存文件以进行提交后,您可以进行其他更改,这些更改将出现在git statusChanges not staged for commit: 部分。当您实际运行 git commit 时,您已暂存的更改将用于进行新的提交,并且此提交的 sha 将成为新的 HEAD。

      git diff 的帮助文档中的第二个问题:

      git diff [--options] --cached [] [--] [...] 此表单用于查看您为下一次提交相对于命名的 .通常,您希望与最新的比较 提交,所以如果你不给,它默认为 HEAD。如果 HEAD 不存在(例如未出生的分支)并且没有给出,则显示所有 阶段性变化。 --staged 是 --cached 的同义词。

      添加修饰符可以让您查看已暂存的要提交的更改。

      当您执行git reset --soft HEAD~ 时,您是在告诉 git 将 repo 的状态移动到 repo 当前指向的提交之前的提交,但保留对文件的所有更改。因此,运行此命令后,您的 repo 将在提交时移回,并且执行 git status 将显示为已修改 HEAD 之前提交中的所有文件。

      【讨论】:

        【解决方案3】:

        关于 git diff --cached

        这里讨论了使用 diff 来比较工作区、索引和远程仓库: https://stackoverflow.com/a/41249720/4522186

        【讨论】:

          猜你喜欢
          • 2022-12-04
          • 2014-03-07
          • 2021-04-23
          • 2019-09-25
          • 2019-05-06
          • 1970-01-01
          • 2016-07-23
          • 2018-11-27
          • 1970-01-01
          相关资源
          最近更新 更多