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

Raj*_*r S 44 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
#
Run Code Online (Sandbox Code Playgroud)

切换到主分支

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

主分支中的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
#
Run Code Online (Sandbox Code Playgroud)

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

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

有人拿到了线索吗?

Gar*_*eth 59

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

要记住的关键是文件没有在git-build分支中修改.它只在您的工作副本中进行了修改.

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

  • "它只在您的工作副本中进行了修改"< - 不,它也在索引中进行了修改,即更改已经上演 (4认同)

Pet*_*rns 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
Run Code Online (Sandbox Code Playgroud)

git stash存储一堆更改,以便您可以安全地存储多个检查点.您也可以给他们姓名/描述.全部使用信息在这里.


Mar*_*rko 12

这是git的默认行为.

如果您愿意,可以使用-f标志结帐以执行"清理结账".

  • 请注意,这并不会将更改保留在您要离开的分支或任何内容之上.这将丢弃未提交的更改(除非文件未跟踪). (13认同)
  • 这是非常罕见的情况,你想要使用`git checkout -f`,因为它会立即,不可逆转,并且不会提示丢弃任何未提交的更改.git checkout的工作原理是有道理的,我建议阅读下面的Gareth评论. (9认同)

Gre*_*ill 9

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