我正在使用 Git 附带的默认 bash,我创建了一个 master 分支(不是裸的)并从中创建了一个分支(我们称之为 new_feature 分支)。
我正在玩分支,我到了我正在测试git checkout
命令的地步。据我了解, checkout 命令允许从一个分支切换到另一个分支。同样据我了解,如果工作目录很脏(即有未暂存的编辑),则 checkout 命令不允许您从一个分支切换到另一个分支。
index.html
现在,我的主分支和功能分支中都有一个文件。两个分支中的两个文件具有完全相同的内容。现在这就是我所做的,这让我感到困惑。
我在我的功能分支上(目前两个文件现在具有完全相同的内容),如果我编辑的内容index.html
,比如标题标签,并且我没有暂存它,如果我发出命令git checkout master
,Git 确实允许我切换到master 分支,更有趣的是,如果我git status
在 master 分支中发出命令,我在 feature 分支上所做的未暂存更改将被复制到 master 分支。不是破坏性的吗?
让我更困惑的是,如果我在功能分支内并编辑index.html
文件的内容,那么在给定时间,两个分支(主分支和特性分支)上的 2 个文件的内容不同标题标签,现在如果我发出git checkout master
命令,它不允许我进行切换,因为它检测到我的工作树或目录是脏的。
底线,正如我基于这些事件注意到的那样,如果 2 个文件具有相同的内容,如果您在一个分支中,修改该文件的内容,然后签出到另一个分支,Git 允许您进行切换,并且Git 会携带您对该目标分支所做的未暂存更改。
但是如果 2 个不同分支上的 2 个文件有不同的内容,如果你在一个分支上,对那个文件进行了编辑,然后发出 checkout 命令切换到另一个分支,Git 不允许你进行切换,因为它检测到工作树很脏的某种原因。
我的理解是对还是错?我也可以用一点解释来解释为什么我的理解是错误的或正确的。