【发布时间】:2019-11-21 10:18:18
【问题描述】:
我对下面的场景感到困惑
git init (command 0)
Initialized empty Git repository in a path;
echo line1 >a (command 1)
git add a (command 2)`
git commit -m 'first commit' (command 3)
1 file changed, 1 insertion(+)
create mode 100644 a
git branch b (command 4)
echo line2 >>a (command 5)
git checkout b (command 6)
Switched to branch 'b'
git status (command 7)
Changes not staged for commit
git checkout master (command 8)
Switched to branch 'master'
git add a (command 9)
git status (command 10)
Changes to be committed
git checkout b (command 11)
Switched to branch 'b'
git status (command 12)
Changes to be committed:
Q1:由于分支 b 是在提交后创建的,所以 b 的初始存储库应该包含文件 'a',切换到 b 后,工作目录应该初始化为分支 b 上的最后一次提交。但是工作目录中的文件a没有改变(仍然包含2行),这是某种防止丢失更改的机制吗?
Q2:在命令8之后,当前分支应该是master,然后将文件'a'添加到索引中然后checkout回到分支b,此时git状态返回(要提交的更改)。但是我在master分支中添加了文件'a',为什么我可以在另一个分支上提交它? 而且我对结帐分支时索引文件如何更改(或不更改)有点困惑
提前致谢!
【问题讨论】:
-
这并不是说 分支 共享一个索引文件(尽管实际上它们是共享的)。相反,整个存储库只有一个索引文件。更准确地说,每个工作树都有一个独特的索引;并且存储库有一个工作树(直到您添加更多),因此它只有一个索引(直到您添加更多工作树)。任何
git checkout branch都必须使用该索引。
标签: git git-branch git-checkout