在Git中切换分支时如何处理未提交的更改

4

我正在处理我的主分支,并且在主分支内有一些未提交的更改。我已经创建了一个功能分支,使用 git checkout feature_branch 命令我可以切换到我的功能分支。以下是我遇到的几个疑问:

  1. 为什么我在自己的分支中看到未提交的更改,当我在主分支内进行修改时。如果我在主分支中提交我的更改并切换到我的功能分支,我就不会看到与主分支相关的提交更改。我期望未提交更改的行为也应该相同。
  2. 我在Git中发现了stash命令,在那里提到如果你在主分支中有任何未提交的更改,并且想要切换到其他分支,Git将不允许你这么做,所以你需要将更改存储在主分支中,然后才能切换到开发分支。我没有遇到这个问题。我有什么遗漏吗?如果有,stash命令的重要性是什么?
1个回答

7
如果我在主分支中提交了更改并切换到我的特性分支,我不会看到特定于主分支的已提交更改。我对未提交更改也期望有相同的行为。
这不是一种明智的行为。未提交的更改“根据定义”不是针对分支进行的。分支是指向提交的指针,并且没有与未提交更改相关联的提交。他们是针对您的工作目录进行的,没有任何东西将它们与任何分支绑定。它们甚至与“Git”无关。在您提交(或隐藏)它们之前,Git 绝对不会跟踪它们,并且永远不会尝试管理它们。
我在 Git 中遇到了 stash 命令,在那里提到如果您在主分支中有任何未提交的更改,并且想要切换到其他分支,git 将不允许您这样做,因此您需要在主分支内隐藏更改...
这是错误的。存储不在任何分支内部。有一个全局的存储池。
我没有遇到这个问题。
只有在切换分支可能导致您的未提交更改被覆盖时,才会阻止您切换分支。
我漏掉了什么吗?如果是,使用 stash 命令的重要性是什么?
只有在影响到任何将被更改的文件时,您才需要担心隐藏您的更改。如果您对一个在两个分支之间相同的文件进行修改,则从一个分支切换到另一个分支不需要藏匿。如果文件在其他分支上不同,则 Git 不会让您切换分支,因为这将销毁您未提交的更改。
尝试切换分支是安全的,如果 Git 警告您“未提交的更改将被覆盖”并且拒绝切换分支,则可以隐藏您的更改并重试。

谢谢。我尝试了这个例子并且能够验证相同的结果。 - zilcuanu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接