为什么git branch中的更改会自动复制到主分支?

时间:2018-02-14 10:28:56

标签: git branch git-branch

我正在尝试使用分支来处理项目的不同部分。让我们说我在主分支上,我有一个文件test1。现在,我创建另一个分支并切换到它:

git branch first_branch
git checkout first_branch

现在我创建另一个文件,说test2并添加一些内容。现在当我将分支切换到master时,我得到:

Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

但是当我现在检查文件时,我看到文件test2包含所有内容!怎么可能?我尝试了多个分支,一切都只是被复制到所有分支。这不是我想要的,因为我想让我的实验工作与既定的工作分开。

1 个答案:

答案 0 :(得分:1)

这是按预期工作的。 git checkout跨分支进行未添加和未提交的更改。如果您在切换分支之前未调用git commit,则会发生这种情况。所以:

git checkout master ; git checkout -b first_branch
# modify test1
git add test1
git checkout master
# test1 still modified
git checkout -b second_branch
# test1 still modified

这是一项功能:在您提交之前,所有更改都只在工作目录中,或者在您运行git add之后,在所谓的"索引"中。索引包含未提交的更改。只有在运行git commit之后,索引的当前内容才会转换为正确的提交对象,之后索引本身将再次为空。