git分支中的修改过的文件会溢出到另一个分支中

我正在与主分支和另一个主题分支的git存储库。 我已经切换到主题分支,并修改了一个文件。 现在,如果我切换到主分支,相同的文件显示为已修改。

例如:

git-build分支中的git状态:

# On branch git-build # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: cvsup_current # 

切换到主分支

 [root@redbull builder_scripts (git-build)]# git co master M builder_scripts/cvsup_current Switched to branch "master" 

主分支中的git状态

 [root@redbull builder_scripts (master)]# git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: cvsup_current # 

为什么该文件显示为在主分支中修改,即使它在git-build分支中被修改?

我的理解是分支是彼此独立的,当我从一个分支转换到另一个分支时,变化不会从一个分支“溢出”到另一个分支。 所以我显然在这里错过了一些东西。

任何人都有一个线索棒?

这是git的默认行为。

如果你喜欢,你可以使用-f标志来签出“clean checkout”。

为什么该文件显示为在主分支中修改,即使它在git-build分支中被修改?

要记住的关键是该文件没有在git-build分支中修改。 它只是在你的工作副本中修改。

只有当您提交时,才会将更改放回您检出的任何一个分支中

如果你想临时存储你的更改到一个分支,而你去另一个分支上工作,你可以使用git stash命令。 这是使用git的一些令人惊叹的小小的不足之处。 工作stream程示例

 git stash #work saved git checkout master #edit files git commit git checkout git-build git stash apply #restore earlier work 

git stash存储了一堆变化,所以你可以安全地存储多个检查点。 你也可以给他们名字/描述。 完整的使用信息。

修改后的文件在添加提交之前不会放入存储库。 如果您切换回主题分支并提交该文件,那么它将不会出现在主分支上。

  • 它不是像git分支互相依赖,而且他们也没有一个完整的代码库分别为每个分支。
  • 对于每个提交,Git都存储一个包含指向更改的指针的对象。 所以每个分支都指向它自己的最新提交和HEAD指向你当前所在的分支。
  • 当您切换分支时,HEAD指针指向该分支的特定提交。 所以如果有修改的文件,默认行为是复制它们。

你可以做以下事情来解决这个问题。

  1. 使用-f选项忽略更改。

如果您想保存更改:

  1. 在同一分支中本地提交更改,然后切换分支。
  2. 使用git stash ,切换分支,做你的工作,切换回原来的分支,并做git stash apply