鉴于这个git树:
A <--- B <--- C (HEAD, master)
是否可以将树置于此状态:
A <--- B (HEAD, master) <--- C
(除了master
之外没有分支或标签。)换句话说,提交(C
)是否存在而不是分支(或标记)指向的提交或者分支(或标记)指向的提交的祖先?
(这个问题纯粹是理论上的,可以帮助我更好地理解git分支是如何工作的。)
答案 0 :(得分:2)
提交C
可以暂时存在(作为悬挂提交);一旦GC发生,它将被回收。
使用:
git fsck --unreachable
看到悬空提交和blob。请注意,由于git
的概率为reflog
,您所描述的内容不会立即创建悬空提交,C
将保留reflog
一段时间。 git
维护reflog
以防万一您犯了错误并需要恢复某些内容。
答案 1 :(得分:2)
当然,
git checkout -b tmp
touch whatever.txt
git add -A
git commit -m "committed!"
git checkout master
git branch -D tmp
其前身是master的当前HEAD的提交现在仍然可用,但没有名称指向它。你仍然可以得到它,例如使用reflog命令。
另一种可能性,因为C已存在:
git checkout -b tmp
git checkout master
git reset --hard HEAD~1
git branch -D tmp