git 分行和结账什么都不做?

git branch and checkout does nothing?

我是 git 工作流程的新手(在工作中习惯于专有版本控制系统)。我遵循了一些关于如何在本地创建分支并在那里进行更改的教程,所有这些都不会影响 master。这是我所做的:

  1. git clone <url>
  2. git checkout -b change_readme
  3. 随机更改 自述文件 文件。
  4. git checkout master

但现在在Readme中看到了同样的变化。

我以为我回到master了,应该不会有什么变化。此外,如果我在 master 中进行了更改,那么当我回到 change_readme branch 时也会有相同的更改。就好像我从来没有做过任何分支。

在步骤 3) 和 4) 之间,您没有将更改添加到索引(使用 git add 命令),并且您没有在本地提交更改(使用 git commit),所以更改没有特别链接到分支。

您应该遵循以下步骤:

  1. git clone <url>
  2. git checkout -b change_readme
  3. 随机更改 自述文件 文件。
  4. git add .
  5. git commit -m "Commit the change of Readme file"
  6. git checkout master

如果要将更改推送到远程 change_readme

,请在步骤 5) 之后使用 git push 命令

当您将更改提交到一个分支时,它们只存在于该分支中,因此如果您切换到 change_readme 分支,这些更改将不存在

如果你想将你在master中所做的更改添加到你创建的分支中,尝试:

git push master : change_readme

如果您想推送到远程存储库,请尝试:

git push master : change_readme

有关要使用的简短命令序列,请参阅

要了解实际情况,请注意 Git 对于如何进行源代码版本控制有一些特殊的概念。特别是:

  • 对Git重要的是提交。提交有一些元数据,例如提交者、时间和原因(作者的日志消息),以及所有文件的完整快照。提交由大而丑陋的字母和数字字符串标识。这些被称为 哈希 ID,有时也称为 SHA-1 ID(Git 目前使用安全哈希算法 1 来生成它们)或对象 ID (OID)。人们有时将它们称为 commit hash(当它们专门用于提交时——Git 也将其用于其他用途)。

  • 提交中的文件被冻结,并压缩成一种特殊的 Git-only 形式。 (事实上​​,提交中的所有内容都被冻结了——你不能更改它,你只能解冻它并制作一个新的和改进的并使用那个代替 旧的。这就是 git commit --amend 所做的,例如。)因为它们 的 Git-only 形式,你需要一个工作地点。

  • 因此,Git 为您提供了一个 工作树。在这里,您的文件具有普通的日常形式。您可以使用、编辑、替换它们等等。 Git 并没有真正使用这些文件——它只是提供它们,从提交中提取。

  • Git 从 Git 调用的地方进行新的提交,不同的是 index 暂存区,或 缓存 ,取决于谁/Git 的哪一部分在进行调用。索引很难看到(你 可以 看到它 - 尝试 git ls-files --stage,例如 - 但通常它有太多东西 in 它以这种方式看待它)。索引中的文件是特殊的 Git-only 形式,准备提交:几乎,但不完全,冻结。

您将需要经常使用的 git add 命令将文件从工作树复制到指数。这将替换以前的副本(如果有的话),或者第一次将新文件放入索引中。现在可以提交了。

许多其他 Git 命令也使用或操作索引。最明显的是 git commit,它立即获取索引中的任何内容并将其冻结到新的提交中。不太明显的是 git reset,它根据选项和标志将文件从提交复制到索引,也可能复制到工作树。 git checkout 命令也有一种模式,它也可以将文件从提交复制到索引,然后再复制到工作树,或者从索引复制到工作树,而无需先从提交中出来。

当您使用 git status 查看发生了什么时,git status 比较 当前(或 HEAD)提交到索引。这里 不同 的是 staged for commit。然后它将索引与工作树进行比较。 不同 这里是 not staged for commit。因此,如果您进行了一些更改,使用git add将它们复制到索引/暂存区,HEAD vs index 会显示阶段性变化。如果您尚未使用 git addHEAD vs index 将不显示任何内容,但 index-vs-work-tree 将显示未暂存的更改。

索引通常很麻烦,人们可能希望 Git 像 Mercurial(它不需要索引),但它也可以让您做一些花哨的技巧。重要的是要注意每个文件都有 个副本:一个在 HEAD 中,一个在索引中,一个在工作树中,而不仅仅是冻结的HEAD 复制和可编辑的工作树复制。