git branch和checkout什么都不做?

时间:2019-01-21 22:31:01

标签: git git-branch git-flow

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

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

但是现在自述文件中看到了相同的更改。

我以为我会重新掌握,应该没有任何变化。另外,如果我对母版进行了更改,那么当我移回change_readme branch时,也会进行相同的更改。好像我从未做过任何分支一样。

3 个答案:

答案 0 :(得分:3)

在步骤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

如果要将更改推送到远程git push,请在步骤5)之后使用change_readme命令。

答案 1 :(得分:1)

有关使用的简短命令,请参见veben's answer

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

  • 对Git重要的是 commits 。提交具有一些元数据,例如创建者,创建时间和原因(作者的日志消息)以及所有文件的完整快照。提交通过难看的字母和数字字符串来识别。这些称为哈希ID ,有时也称为SHA-1 ID(Git当前使用安全哈希算法1进行创建)或对象ID(OID)。人们有时将它们称为 commit hash (当它们专门用于提交时-Git也将其用于其他用途)。

  • 提交中的文件被冻结,并压缩为特殊的仅Git形式。 (实际上,提交中的所有内容都是冻结的-您不能对其进行更改,只能将其解冻并制作新的改进版本,并使用该代替就是git commit --amend的工作。)由于它们仅限Git形式,因此您需要一个工作的地方。

  • 因此,Git为您提供了工作树。在这里,您的文件具有普通的日常格式。您可以使用它们,对其进行编辑,替换它们,等等。 Git 并没有真正使用太多文件,它只是提供了从提交中提取的文件。

  • Git会根据Git调用的内容进行新的提交,具体取决于 index 临时区域缓存关于Git的谁/哪个部分正在执行呼叫。索引很难看(例如,您可以看到它—试试git ls-files --stage –但是通常它里面有太多东西 ,无法查看它)这条路)。索引中的文件采用特殊的仅Git格式,可以随时提交:几乎但不是完全冻结。

您将需要经常使用的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索引将显示为已登台变化。如果尚未使用git add,则HEAD vs index不会显示任何内容,但是index-vs-work-tree将显示未暂存的更改。

索引通常是一种痛苦,人们可能希望Git像Mercurial(它不会打扰索引),但是它也可以让您做一些花哨的技巧。请务必注意,每个文件都有三个副本:HEAD中的一个副本,索引中的一个副本和工作树中的一个副本,而不仅仅是冻结的{{1 }}复制和可编辑的工作树副本。

答案 2 :(得分:0)

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

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

git push master : change_readme

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

git push master : change_readme