不同的分支共享一个索引文件?

时间:2019-07-11 16:23:07

标签: git git-branch git-checkout

我对以下情况感到困惑

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”,为什么可以在另一个分支上提交文件? 而且我对结帐分支时索引文件如何更改(或不更改)感到有些困惑

谢谢!

1 个答案:

答案 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.