我是git工作流程的新手(用于工作中的专有版本控制系统)。我遵循了一些有关如何在本地创建分支,在此处进行更改的教程,所有这些都不会影响master。这是我所做的:
git clone <url>
git checkout -b change_readme
git checkout master
但是现在自述文件中看到了相同的更改。
我以为我会重新掌握,应该没有任何变化。另外,如果我对母版进行了更改,那么当我移回change_readme branch
时,也会进行相同的更改。好像我从未做过任何分支一样。
答案 0 :(得分:3)
在步骤3)和4)之间,您没有将更改添加到索引(使用git add
命令),也没有在本地提交更改(使用git commit
),因此更改没有特别链接到分支。
您应遵循以下步骤:
git clone <url>
git checkout -b change_readme
git add .
git commit -m "Commit the change of Readme file"
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