在$ Git checkout branchName上,所有更改(已提交或未提交或未提交)都显示在已切换分支上

时间:2016-03-23 09:10:42

标签: git git-branch git-checkout

Git /分支奇怪的行为

最近,我不得不恢复计算机并重新安装所有软件。

Git表现得我不熟悉。

我做了

$ git init
$ git branch -b newBranch
$ git checkout newBranch

在此之后,我对几个文件进行了一些更改并添加了一个新文件。

我没有$ git add -A NOR $ git commit -m 'msg'

在,

$ git checkout master

newBranch上所做的所有更改都反映在master

  • 对newBranch上所有文件所做的所有更改
  • 在newBranch上创建的所有新文件

在,

$ git status

所有更改都显示为未上演(红色)。

以前,每当我切换到分支机构并进行一些更改时, 在切换到另一个分支时,我将无法再看到这些更改(暂存/未暂存或已提交/未提交)。

仅在运行时

$ git merge sourceBranch destinationBranch

这些更改会在其他分支上显示。这似乎不是这种情况

与我的Git。

是吗

  • 破?
  • missconfigured?
  • 误安装?
  • 损坏?
  • 我不理解的是什么?

4 个答案:

答案 0 :(得分:0)

因此,您现在正在newBranch分支机构工作,您进行了更改,但尚未提交任何内容。

为什么允许结帐master分支?

Git允许这样做,因为切换到不会覆盖您的任何本地更改。

但是,如果您现在正在使用master分支并更改某些文件,Git将阻止您这样做,因为本地更改将被覆盖。

答案 1 :(得分:0)

简短回答:在您addcommit之前,git不会跟踪您的本地更改。如果在没有添加或提交的情况下切换分支,git不会覆盖这些本地更改,因此您不会太容易丢失数据。

有三个独立的域名:

  • 您的本地文件(L
  • 暂存区域(S
  • 存储库(R

您已在L中进行了更改。这些不会反映在SR中,域名是分开的。如果你没有告诉git addS)或commitR),L中的更改不属于任何分支但是,仅限于L域。

当您checkout分支,来自masternewBranch时,git会更改当前的HEAD,即本地更改如果您前往SR,请引入addcommit

当您checkout分支时,git还会尝试将已签出的提交(在您检出的分支的顶端)提交到文件系统域L但是,为了防止自己陷入困境并在L中丢失未经分级和未经修改的更改,git不会覆盖这些L更改。由于它们未被添加或提交,否则无法检索它们。

注意:您可以通过将-f(强制)标记传递给checkout来告诉git覆盖此类本地更改。你会在没有任何警告的情况下丢失本地更改。

另请注意:在进行本地更改时切换分支并非总是可行,例如,如果更改为分支将应用将覆盖某些本地更改的更改。这是我经常使用-f的地方,当我知道我想丢失本地更改时。

这个答案(我的)可能有所帮助:https://stackoverflow.com/a/2569513/108802

答案 2 :(得分:0)

它没有被破坏或任何尝试添加那些非舞台并再次提交。

答案 3 :(得分:0)

以前的安装误导了我的实际命令和Git功能。 必须彻底阅读文档。