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

为什么我的新Git分支不是空的?,git,git-branch,branching-and-merging,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) Already up-to-date. 在完成git merge master后,我得到 nothing to commit (worki

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

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)
Already up-to-date.
在完成git merge master后,我得到

nothing to commit (working directory clean)
Already up-to-date.

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

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

新分支
dev
将使用
主分支的状态创建,因此在您提交对
主分支的更改之前(在最初创建开发分支之后),没有任何内容可以合并到
开发分支中)Git中的分支只不过是指向提交的指针。当您创建一个分支时,它与另一个分支指向同一个提交。一旦您提交之后,您就会发现它们有所不同。大多数其他版本控制系统都不使用这种基于快照的方法

因此,当您发出merge命令时,它没有要合并的内容,因为当前分支已经包含其他分支的所有提交

我强烈建议阅读progit.org/book,充分理解历史结构遵循的DAG(有向无环图)


希望这能有所帮助。

Git中的分支只不过是指向提交的指针。当您创建一个分支时,它与另一个分支指向同一个提交。一旦您提交了之后,您就会发现它们有所不同。大多数其他版本控制系统都不使用这种基于快照的方法

因此,当您发出merge命令时,它没有要合并的内容,因为当前分支已经包含其他分支的所有提交

我强烈建议阅读progit.org/book,充分理解历史结构遵循的DAG(有向无环图)


希望这能有所帮助。

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或更高版本中才可能实现。

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或更高版本中才可能实现。

非常合理。谢谢。非常合理。谢谢。分支没有状态,它们是引用(指针)提交。这就是它们如此轻量级的原因。我们没有尝试提供技术细节,只是使用有用的语言来描述创建的分支分支分支没有状态,它们是引用(指针)提交。这就是它们如此轻量级的原因。我们并没有试图给出技术细节,只是用有用的语言来描述所创建的分支