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

我正在使用主分支和另一个主题分支的git存储库。 我已切换到主题分支并修改了一个文件。 现在,如果我切换到master分支,则该文件显示为已修改。

例如:

git-build分支中的git status:

# 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 status

[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分支中对文件进行了修改,该文件在master分支中仍显示为已修改?

我的理解是分支之间是相互独立的,当我从一个分支更改为另一个分支时,更改不会从一个分支“溢出”到另一个分支。 因此,我显然在这里缺少了一些东西。

有人有线索吗?

Rajkumar S asked 2020-07-20T13:10:48Z
5个解决方案
59 votes

为什么即使在git-build分支中对文件进行了修改,该文件在master分支中仍显示为已修改?

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

仅在提交后,更改才会返回到已签出的任何分支中

Gareth answered 2020-07-20T13:11:38Z
39 votes

如果您要在分支上进行工作时暂时将更改存储到一个分支上,则可以使用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存储了一堆更改,因此您可以安全地存储多个检查点。 您也可以为其命名/说明。 完整的使用信息在这里。

Peter Burns answered 2020-07-20T13:12:04Z
12 votes

这是git的默认行为。

如果愿意,可以使用-f标志进行检出以进行“干净检出”。

Marko answered 2020-07-20T13:11:09Z
9 votes

除非您添加并提交,否则修改后的文件不会放入存储库中。 如果切换回主题分支并提交文件,则该文件不会出现在master分支上。

Greg Hewgill answered 2020-07-20T13:12:24Z
1 votes
  • 它不像git分支相互依赖,但它们也相互依赖对于每个分支,也没有单独的完整代码库。
  • 对于每次提交,Git存储一个对象,该对象包含一个指向变化。 因此,每个分支都指向其自己的最新提交,而HEAD则指向您当前所在的分支。
  • 当您切换分支时,HEAD指针指向该分支分支的特定提交。 因此,如果有修改的文件,默认行为是复制它们。

您可以执行以下操作来克服此问题。

  1. 使用git stash选项忽略更改。

如果要保存更改:

  1. 在同一分支中本地提交更改,然后切换科。
  2. 使用git stash,切换分支,执行您的工作,然后切换回原始分支并执行git stash apply
Raviteja answered 2020-07-20T13:13:21Z
translate from https://stackoverflow.com:/questions/246275/modified-files-in-a-git-branch-are-spilling-over-into-another-branch