为什么局部变化似乎在两个分支中平等存在?

时间:2015-10-06 11:46:26

标签: git git-branch git-checkout

我的git repo中有不同的分支。我签出一个新分支并应用更改。当我结帐回我的主分支时,它仍然显示更改。类似地,当我在新分支中进行提交更改时,检查主分支,它再次将这些更改显示为暂存。

为什么即使我切换回我的分支regrid-more-flexible-times,我的分支master中的更改似乎也会显示(暂存或未暂停)?请参阅下面的插图。

$ git branch
* master
  regrid-more-flexible-times
  regrid-sst
$ git checkout regrid-more-flexible-times
Switched to branch 'regrid-more-flexible-times'
$ git status
# On branch regrid-more-flexible-times
nothing to commit (working directory clean)
$ vim regridworkflow.py
$ git status
# On branch regrid-more-flexible-times
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   regridworkflow.py
#
no changes added to commit (use "git add" and/or "git commit -a")

到目前为止一切顺利。我在我的分支regrid-more-flexible-times中进行了更改。现在我需要回到master来访问代码库而不做任何更改。

$ git checkout master
M       mms/src/main/python/regridworkflow.py
Switched to branch 'master'
$ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   regridworkflow.py
#
no changes added to commit (use "git add" and/or "git commit -a")

咦?为什么分支master显示我在分支regrid-more-flexible-times上所做的未分阶段更改?也许只是在我上台后才意识到差异?

$ git checkout regrid-more-flexible-times
M       mms/src/main/python/regridworkflow.py
Switched to branch 'regrid-more-flexible-times'
$ git add regridworkflow.py
$ git status
# On branch regrid-more-flexible-times
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   regridworkflow.py
#
$ git checkout master
M       mms/src/main/python/regridworkflow.py
Switched to branch 'master'
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   regridworkflow.py
#

...为什么分支master会显示我在分支regrid-more-flexible-times上暂停的更改?

我的目标是能够在分支regrid-more-flexible-times上进行更改,但能够签出没有这些更改的master分支。为什么上面的工作流程没有这样做,我应该怎样做呢?

2 个答案:

答案 0 :(得分:4)

  

我在我的分支regrid-more-flexible-times中进行了更改。

不,你已经改变了你的副本。

  

为什么分支master会显示我在分支regrid-more-flexible-times上进行的更改?

每个工作副本只有一个临时区域。每个分支都不存在它们。请参阅git stash,了解如何在不提交更改的情况下保存更改。

答案 1 :(得分:0)

the documentation

  

git checkout&lt; branch&gt;

     

要准备工作,请切换到它   通过更新工作树中的索引和文件,以及通过   将HEAD指向分支。 对文件中的本地修改   保留工作树,以便它们可以提交到&lt; branch&gt;。

这就是您结帐主数据时未分期更改的原因。

您可能希望将更改提交到分支然后结帐主服务器,或使用git stash保存更改而不提交更改。