git分支。分支时,文件系统不应该更新吗?

时间:2013-12-30 22:33:56

标签: git

我一直在阅读教程here.这解释了使用git创建分支的基础知识。

我正按照说明尽可能详细地说明。但是,我得到的行为与网站建议的不同。就是这一点:

  

Git会重置您的工作目录,使其看起来像您签出的分支所指向的提交的快照。

我遇到的问题是文件系统更改似乎不会保留在自己的分支上。

我建立了一个这样的测试项目:

MyProject 
  | .git
  | file1.txt 
  | file2.txt

从那里,我跑

git checkout -b my_new_feature

然后我在目录中创建一个新文件。

MyProject 
  | .git
  | file1.txt 
  | file2.txt
  | myfeature.txt

现在,我思考它的工作原理是新文件myfeature.txt“在”分支my_feature上“,因此根本没有被”看到“ master

所以,我切换回主人,希望新文本文件消失

git checkout master 

但它仍然存在。这就像我根本没有分支。

MyProject 
  | .git
  | file1.txt 
  | file2.txt
  | myfeature.txt

为了看看发生了什么,我尝试合并两个

git merge my_feature 

它说这已经是最新的了。

我对branch究竟是什么感到困惑,或者我做错了什么?

3 个答案:

答案 0 :(得分:2)

结帐my_feature并创建新文件后,请尝试运行git status。你会看到Git说出这样的话:

Untracked files:
(use "git add <file>..." to include in what will be committed)
    foo.txt

此时,Git不知道新文件。它不知道它是什么。 Git没有跟踪它,所以它是未跟踪的文件。因为它不知道它,它只会忽略它,所以交换回master会在那里留下foo.txt(新文件)。

如果您在my_feature分支上,然后添加并提交文件:

git add foo.txt
git commit -m "Added my new file"

然后尝试运行git status。你会看到:

On branch my_feature
nothing to commit, working directory clean

现在Git知道了新文件,因为你已经添加并提交了它。它现在知道该文件的状态,并且它仅存在于my_feature上,因为它是您首次将其添加到存储库的位置。现在你可以git checkout master,你会看到foo.txt消失,因为Git知道主文件上不存在该文件。

TL; DR:直到你告诉Git一个文件,它不知道如何处理它,所以只会忽略它。

如果你对git的行为感到困惑,那么git status通常会有助于清理。

答案 1 :(得分:1)

除非你实际上添加(使用git add)和 commit (使用git commit)新文件,否则什么都不属于任何东西。它只是一个与Git无关的文件的目录。

如果您在my_new_feature分支上,并添加并提交文件myfeature.txt然后切换回master(不知道那个文件),然后你会看到它从你的工作目录中消失。

答案 2 :(得分:0)

你需要跟踪git的新文件才能知道它在新分支中。尝试添加并提交它。