git分支和提交——你能解释一下(对我)这种令人费解的行为背后的理论吗?

git分支和提交——你能解释一下(对我)这种令人费解的行为背后的理论吗?,git,git-branch,Git,Git Branch,我有一个总支,里面一切都很好。然后我创建了一个名为“实验”的分支,并创建了一个新文件。在我的实验分支中,我使用gitadd命令添加这个文件。然后我结帐我的主分行。在我的主分支中,我运行git status,发现此文件也已添加到我的主分支中。然后在我的主分支中运行git commit-m“message”,然后进行提交。然后我切换到我的实验分支并运行git status,发现文件也已提交到我的实验分支中 以下是我所期望的:在添加新文件后切换到主分支时,我期望该文件不会出现在那里。毕竟,我没有在主分

我有一个总支,里面一切都很好。然后我创建了一个名为“实验”的分支,并创建了一个新文件。在我的实验分支中,我使用
gitadd
命令添加这个文件。然后我结帐我的主分行。在我的主分支中,我运行
git status
,发现此文件也已添加到我的主分支中。然后在我的主分支中运行
git commit-m“message”
,然后进行提交。然后我切换到我的实验分支并运行
git status
,发现文件也已提交到我的实验分支中


以下是我所期望的:在添加新文件后切换到主分支时,我期望该文件不会出现在那里。毕竟,我没有在主分支中创建文件,也没有在主分支中添加文件。因此,当我切换到主分支并运行
git status
时,为什么它会发现文件已经添加并准备提交?当我在主分支中提交它时,为什么我在切换回主分支时也会发现它在实验分支中提交?它一次提交到两个分支了吗?

当您运行
git add
时,文件没有提交,它只添加到git的“索引”中。在您的实验分支上执行
git add
之后,您可能希望运行
git commit

在Git中切换分支时,只要工作目录和索引中的更改不与分支切换过程中更改的任何其他文件冲突,就可以继续执行这些更改

为解决您的具体问题:

…并发现此文件也已添加到我的主分支


如果您尚未运行
git commit
,则该文件尚未添加到任何分支。

仅仅因为切换回实验分支时
git status
没有显示任何内容,并不意味着该文件已在该分支中提交。这只是意味着你没有任何暂存的文件。它没有显示未跟踪的文件和暂存的文件,因此我猜该文件已提交。使用
git log
查看哪些提交已应用于你当前的分支。您可能会发现该文件提交给了“主”分支,而不是“实验”分支。谢谢。运行git日志会显示主分支的两个提交,但exp分支只有一个提交。因此,我想在我的exp分支中,我现在应该像分支对该文件一无所知一样继续操作。在切换到主分支之前,我没有运行
git commit
,我也不打算这样做。然而,当我切换到主分支并运行
git status
时,似乎文件已经被暂存,即使我在实验分支中暂存了它,而不是在主分支中。我认为混淆是因为我使用了术语“add”,因为您使用了“add”命令来暂存文件。当您添加一个更改过的文件时,它会进入索引。它不是“为分支X准备的”,因为每个分支都没有单独的索引。