今天我在做我的一个项目,我意识到 git 有点奇怪。Git 将允许您将工作提交到幽灵分支。我使用术语ghost branch是因为更改存在于树中的某处但会回避git log --graph --decorate --oneline --all
。谁能向我解释这是为什么?
重现此行为的步骤
进入分离的头部状态(你可以通过执行到达那里git checkout <hash>
)。
# Not currently on any branch.
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# uml 1.pdf
对您的代码库进行一些更改。并使用 . 检查工作目录的状态git status
。这应该列出更改,但声明您不在任何分支上。
# Not currently on any branch.
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: .gitignore
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# uml 1.pdf
使用提交更改git commit -am '<message>'
[detached HEAD ded7725] updated .gitignore
1 files changed, 8 insertions(+), 1 deletions(-)
如果您随后签出一个已知的分支,例如“master”,那么在 detached head 状态下提交的所有更改都将消失。这是意料之中的。
Runniggit log --graph --decorate --oneline --all
将显示所有提交,除了在分离头上提交的提交(ded7725
在我的情况下)。
但是, agit checkout <hash-for-ghost-branch>
返回提交到 ghost 分支的更改。问题是:人们无法永远记住这个哈希值。
预期的行为将是这个幽灵分支将在一个有点悬垂的叶子上记录图表。但它不存在。任何关于为什么会发生这种情况的解释都值得赞赏。或者也许我错过了一个显示隐藏分支的标志......