我一直在阅读教程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
究竟是什么感到困惑,或者我做错了什么?
答案 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的新文件才能知道它在新分支中。尝试添加并提交它。