为什么Git允许交换分支而(!!!)不';切换后是否不更新工作树?

为什么Git允许交换分支而(!!!)不';切换后是否不更新工作树?,git,git-checkout,Git,Git Checkout,Git for Windows 2.5.2。我希望,如果索引有未限制的更改,那么Git将禁用对其他分支的检查。但我看到了其他结果。示例的脚本: #!/bin/bash # script.sh # Run this script in the Git Bash. git --version host="./sandbox" if [ -d $host ]; then rm -r $host mkdir $host echo \"$host\" directory recre

Git for Windows 2.5.2。我希望,如果索引有未限制的更改,那么Git将禁用对其他分支的检查。但我看到了其他结果。示例的脚本:

#!/bin/bash
# script.sh
# Run this script in the Git Bash.
git --version
host="./sandbox"
if [ -d $host ]; then
    rm -r $host
    mkdir $host
    echo \"$host\" directory recreated...   
else
    mkdir $host
    echo $host directory \"$host\" created.
fi
cd $host
git init -q
touch 1.txt 2.txt 3.txt
git add "*"
git commit -qm "Initializing"
git branch
ls
git checkout -qb branch#1
rm 3.txt
echo ABCD >> 1.txt
# git commit -aqm "branch#1_commit#1"
git branch
ls
git checkout -q master
git branch
ls
git checkout -qb branch#2
rm 2.txt
echo 1234 >> 1.txt
# git commit -aqm "branch#2_commit#1"
git branch
ls
git checkout -q master
git branch
ls
我有这样的产出:

bushm@DESKTOP-ISD2NUH MINGW64 /d/src
$ /d/src/script.sh
git version 2.5.0.windows.1
./sandbox directory "./sandbox" created.
* master
1.txt  2.txt  3.txt
* branch#1
  master
1.txt  2.txt
  branch#1
* master
1.txt  2.txt
  branch#1
* branch#2
  master
1.txt
  branch#1
  branch#2
* master
1.txt

bushm@DESKTOP-ISD2NUH MINGW64 /d/src
$
我看到swithing已完成,但切换后的工作树是相同的(一个文件而不是三个文件)(未更新)。我希望在切换索引之后,它的内容将被取消,分支的最后一次提交将被提取到工作树中。为什么工作树没有根据
master
分支上次提交的内容进行更新

我希望,如果索引有未限制的更改,那么Git将禁用对其他分支的检查

这种期望是错误的。您可以预期的是,如果切换到另一个分支可能会导致数据丢失,那么Git将阻止您切换到另一个分支(除非您强制切换)。但在您的情况下,切换到其他分支不会对您造成任何伤害。您对某些文件进行了本地更改,但这些文件在所有分支中都是相同的,因此可以简单地保留本地更改

我希望,如果索引有未限制的更改,那么Git将禁用对其他分支的检查


这种期望是错误的。您可以预期的是,如果切换到另一个分支可能会导致数据丢失,那么Git将阻止您切换到另一个分支(除非您强制切换)。但在您的情况下,切换到其他分支不会对您造成任何伤害。您对某些文件进行了本地更改,但这些文件在所有分支中都是相同的,因此可以简单地保留这些本地更改。

>但这些文件在所有分支中都是相同的
你确定吗?我没有删除主分支中的文件。但是为什么当我切换到master时,工作目录仍然有两个文件而不是三个文件?@Bush你没有删除任何分支中的文件。文件删除只是您从未提交的本地更改。切换分支时保留了这些本地更改。打印错误:一个而不是两个。我仍然不明白。当我切换到其他分支时,我希望工作树也会改变。主分支的最后一次提交包含三个文件。但是当我执行git checkout master时,工作目录仍然只有1.txt。为什么?@Bush再说一遍,你删除2.txt和3.txt是一个本地更改。它不是你的分支机构的一部分。因为它不是您所在分支的一部分,Git不会在您背后撤销它,它会保留您删除2.txt和3.txt的本地更改。>但是这些文件在您所有的分支中都是相同的
你确定吗?我没有删除主分支中的文件。但是为什么当我切换到master时,工作目录仍然有两个文件而不是三个文件?@Bush你没有删除任何分支中的文件。文件删除只是您从未提交的本地更改。切换分支时保留了这些本地更改。打印错误:一个而不是两个。我仍然不明白。当我切换到其他分支时,我希望工作树也会改变。主分支的最后一次提交包含三个文件。但是当我执行git checkout master时,工作目录仍然只有1.txt。为什么?@Bush再说一遍,你删除2.txt和3.txt是一个本地更改。它不是你的分支机构的一部分。因为它不是您来自的分支的一部分,Git不会在您背后撤销它,它会保留您删除2.txt和3.txt的本地更改。