为什么分支中未提交的更改会影响主分支?

Dud*_*ude 6 git git-branch

我是git的新手,我正在尝试用它来理解概念,特别是分支和合并.

所以这是我的设置,

我有一个主分支,我用'master'文本创建一个主文本文件.
现在我做了git checkout -b branch并创建了一个分支.
我编辑分支'父'文件并添加一行文本.

现在如果我提交此更改并切换回master,它将不会影响,因为它不应该影响,因为分支更改不应该反映在主分支中.

但是,如果我离开分支未提交并切换到主,这个更改反映在那里,git将主文件视为已编辑,当我这样做

git status -s
Run Code Online (Sandbox Code Playgroud)

它显示带有M的主文件.

任何人都可以向我解释未提交的更改如何在主分支中反映出来吗?

Cha*_*esB 6

当签出另一个分支时,Git会保留您未提交的更改,这非常实用.

您可以将此视为未提交的更改"仅属于"您的工作副本,而不属于任何分支或提交.他们是独立的.当您在分支中提交更改时,如果结帐具有不同的文件版本,它们当然会更改.

此行为的唯一例外是,如果分支更改将未提交的文件带到其他版本,则取消结帐的情况如下:

A--B - feature
 \
  -C - master
Run Code Online (Sandbox Code Playgroud)

假设feature分支中的提交B 将一行更改为foo.txt,并且您已master检出分支.你做了不同的改变foo.txt.

  1. 您提交更改master和结帐feature

    git add foo.txt
    git commit -m "changed foo.txt"
    git checkout feature
    
    Run Code Online (Sandbox Code Playgroud)

    这里没有问题,记录的变化master以及何时进行相应feature foo.txt更改.

  2. 如果您没有提交并尝试签出feature,那么Git将打印相应的消息,并保持master分支签出:

    git checkout feature
    
    Run Code Online (Sandbox Code Playgroud)

    错误:checkout会覆盖对以下文件的本地更改:
    foo.txt
    请在提交更改或存储更改之前切换分支.中止