git checkout-b,提交一些文件,签回原始分支,抱怨被覆盖的更改

git checkout-b,提交一些文件,签回原始分支,抱怨被覆盖的更改,git,Git,这让我感到惊讶,我想不出这怎么可能 git checkout-b newbranch 提交除Foo.java以外的一些文件 git checkout master(我所在的原始分支)出现错误: 错误:您对以下文件的本地更改将被签出覆盖: Foo.java 请在切换分支之前提交或隐藏更改 但我已经上了师父的课。因此,我执行通常的工作流程: git隐藏 git签出主机 它自动合并成功。为什么它需要自动合并呢?为什么它需要阻止我的git签出离开master,而不是回到master?我正在试图理解gi

这让我感到惊讶,我想不出这怎么可能

  • git checkout-b newbranch
  • 提交除
    Foo.java
    以外的一些文件
  • git checkout master
    (我所在的原始分支)出现错误:

    错误:您对以下文件的本地更改将被签出覆盖:
    Foo.java 请在切换分支之前提交或隐藏更改
  • 但我已经上了师父的课。因此,我执行通常的工作流程:

  • git隐藏
  • git签出主机

  • 它自动合并成功。为什么它需要自动合并呢?为什么它需要阻止我的
    git签出
    离开
    master
    ,而不是回到
    master
    ?我正在试图理解git何时做出这些抱怨的逻辑。

    当您使用git checkout-b时,它实际上并没有消失,而是保持在同一个提交状态。这就是为什么它允许您签出并保留所有本地更改。“返回”到master会更改提交(并实际修改工作树),这就是为什么它会覆盖您的更改。

    您在另一个分支上修改了
    Foo.java
    吗?@larsmans我认为我没有。我有时也认为我没有编辑文件,但我发出的一些命令确实修改了。也许您的IDE在末尾添加了一个换行符之类的东西。请务必执行
    git status
    git diff Foo.java
    。我已经在一个新的存储库上进行了测试,效果非常好。