假设我们从一个全新的设置开始。
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.
为什么?我认为新分支开始干净(并且为空),直到我们直接添加内容或从现有分支合并。
答案 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)
一个新的分支并不是“新鲜和干净”(这将是什么意思?)它包含分支点原始分支中的所有文件。