好吧所以我是新手使用git ..我认为我理解分支的概念,但现在我很困惑。
让我们说我有一位大师。
我创建了一个名为branch1的分支。
git checkout -b branch1
master
*branch1
我在branch1上做了一些更改,但我意识到在完成我在branch1上的工作之前我必须做一些其他事情。
所以我回到主人那里
git checkout master
*master
branch1
并创建一个名为branch2的新分支。
git checkout -b branch2
master
branch1
*branch2
由于我没有在branch1上提交我的更改,我希望我的branch2不会有branch1代码......但是我看到了branch1所做的更改。
我误解了什么吗?
答案 0 :(得分:3)
由于我没有在branch1上提交我的更改,我希望我的branch2不会有branch1代码
所有分支的工作副本(暂存+未分级更改)都相同。而你所看到的不是branch1的变化,而是工作副本的变化。
在branch1中提交更改后,您将不再在branch2或任何其他分支中看到它们。
答案 1 :(得分:2)
虽然您在进行更改时处于branch1中,但这些更改实际上并不是"在" branch1直到你提交它们。
来自$ git help checkout
:
对工作树中的文件进行本地修改 保留,以便他们可以提交到< branch>。
另一方面,如果在切换回master之前将更改提交到branch1 ,那么当您$ git checkout master
时,git会将工作目录中的文件还原为主人指向的快照,正如您所期望的那样。
如果出于某种原因,您确实希望避免将更改提交到branch1,但仍然在没有这些更改的情况下在不同的分支上工作,您可以考虑使用$ git stash
来存储您的更改,然后切换到新的分支,做你需要的工作,然后切换回branch1并执行$ git stash pop
以取回你的藏匿更改。