为什么我的新Git分支不是空的?

时间:2011-06-06 03:55:01

标签: git git-branch branching-and-merging

假设我们从一个全新的设置开始。

touch somefile
git init .
git add .
git commit -m "initial commit"
git branch dev
git checkout dev

执行git status后,我得到了

nothing to commit (working directory clean)

执行git merge master后,我得到了

Already up-to-date.

为什么?我认为新分支开始干净(并且为空),直到我们直接添加内容或从现有分支合并。

4 个答案:

答案 0 :(得分:4)

Git中的分支只不过是提交的指针。当您像创建分支一样创建分支时,它指向与另一个分支相同的提交。一旦你提交了一些东西,那么你会看到它们不同。大多数其他版本控制系统不适用于这种基于快照的方法。

因此,当您发出merge命令时,它没有任何要合并的内容,因为您当前的分支已包含另一个分支的所有提交。

我强烈建议阅读progit.org/book并完全理解历史结构所遵循的DAG(有向无环图)。

希望这有帮助。

答案 1 :(得分:0)

将使用dev分支的状态创建新分支master,因此在您将更改提交到{{1}之前,没有任何内容可以合并到dev分支中(最初创建dev分支后)。

答案 2 :(得分:0)

git中的分支是指针但是,如果你想让它们使用孤儿,它们可以是空的。创建孤立分支后,检查状态,您将看到树全部被视为新的并等待添加。删除它,你就拥有了你想要的干净分支。

mkdir foo
cd foo
touch somefile
git init .
git add .
git commit -m "initial commit"
git checkout --orphan dev
rm -rf .

这只适用于git 1.7.2或更高版本。

答案 3 :(得分:-2)

一个新的分支并不是“新鲜和干净”(这将是什么意思?)它包含分支点原始分支中的所有文件。