我正在使用主分支和另一个主题分支的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分支中被修改了?
我的理解是分支是相互独立的,当我从一个分支转换到另一个分支时,变化不会从一个分支“溢出”到另一个分支。所以我显然在这里遗漏了一些东西。
任何人都有线索?
答案 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)
您可以执行以下操作来解决此问题。
-f
选项忽略更改。如果您想保存更改:
git stash
,切换分支,完成工作,切换回
原始分支并做git stash apply
。