我对以下情况感到困惑
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之后,当前分支应该是主分支,然后将文件'a'添加到索引中,然后签出回到分支b,这时git status返回(要提交的更改)。但是我在master分支中添加了文件“ a”,为什么可以在另一个分支上提交文件? 而且我对结帐分支时索引文件如何更改(或不更改)感到有些困惑
谢谢!
答案 0 :(得分:1)
实现:将第二行添加到文件后,您尚未提交任何内容。话虽如此
好吧... git试图保存您未提交的更改,除非您强迫它丢失它们。甚至会阻止您执行操作,以免丢失所做的更改。
在命令5和6之间,您没有将更改提交到文件,实际上,它甚至不在索引上。命令6切换到b,并且该修订版正与您所站在的修订版相同,因此git方式“确定”,移至b。您仍然可以取消暂存文件。
在命令8上,您将 back 切换为master,而git则说“当然”(您不打算改用其他版本,所以很好)。
命令11,文件终于进入阶段了……但是再一次没有从当前修订版移开,所以一切都很好。
想看看git如何使您有时无法活动吗?立即提交(在分支b上),然后执行以下操作:
git branch c master
git checkout c
echo hello > a
git checkout b # and here git should keep you from moving.