git分支中的已修改文件正在溢出到另一个分支中

时间:2008-10-29 09:58:31

标签: git git-branch

我正在使用主分支和另一个主题分支的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
#

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

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

任何人都有线索?

5 个答案:

答案 0 :(得分:59)

  

为什么文件在master分支中显示为已修改,即使它已在git-build分支中修改过?

要记住的关键是git-build分支中的文件已修改。它仅在您的工作副本中进行了修改。

只有当您提交时,更改才会返回到您已签出的任何分支

答案 1 :(得分:39)

如果要在对另一个分支执行某个分支时临时存储更改,可以使用git stash命令。这是使用git的惊人的小功能之一。示例工作流程:

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

git stash存储一堆更改,因此您可以安全地存储多个检查点。您也可以给他们姓名/描述。完整使用信息here

答案 2 :(得分:12)

这是git的默认行为。

如果您愿意,可以使用 -f 标记结帐以执行“清理结帐”。

答案 3 :(得分:9)

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

答案 4 :(得分:1)

  • 它不像git branch依赖于彼此而是它们 没有为每个分支单独提供完整的代码库。
  • 对于每次提交,Git都会存储一个包含指针的对象 变化。因此,每个分支指向其自己的最新提交,并且HEAD指向您当前所在的分支。
  • 当您切换分支时,HEAD指针指向该分支 特别提交分支。所以,如果有修改过的文件,那么 默认行为是复制它们。

您可以执行以下操作来解决此问题。

  1. 使用-f选项忽略更改。
  2. 如果您想保存更改:

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