我有两个我通常工作的分支:master和homepage_buildout.最近我被告知在我开始项目之前检查一个旧的提交.我只是做了:
git checkout [commit number]
Run Code Online (Sandbox Code Playgroud)
然后我决定让这个旧的提交像这样的分支:
git checkout -b old_homepage
Run Code Online (Sandbox Code Playgroud)
现在,我意识到我不再需要能够引用分支old_homepage,但我仍然希望它作为提交存在.如何保留这些提交,但在键入时删除分支:
git branch
Run Code Online (Sandbox Code Playgroud)
tor*_*rek 10
我认为你实际上要问的是:"如果我这样做,git branch -d old_homepage那么提交会丢失",答案是:"删除名称只会删除名称 ;只要你能看到它们,提交本身就会自动保留git log --all,实际上甚至更长."
为了更好地可视化,运行类似gitk --all或gitk --tags(尝试两个复杂的git repos).滚动提交.现在想象一下在任何提交上粘贴便条.这是一个"标签"或"分支"名称.取下粘滞便笺.承诺仍在那里,对吧?:-)
这留下了一个明显的问题:什么时候提交实际上会消失?答案是:只有在您删除了所有通往它们的名称之后.该gitk命令(与大多数其他git命令一样)以名称开头HEAD.如果你给它,--all它会添加它可以找到的所有分支名称.如果你给它,--tags它会添加它可以找到的所有标签名称.然后它向后工作,查看每个提交以查看它引用的其他提交.
混帐东西删除(提交等)时,有没有办法通过启动这些明显的品牌之一和向后工作,以找到他们.(即使这样,它会等待很长时间,默认情况下为30到90天.)因此,如果您将分支或标记标签添加到您通过执行此操作找到的旧提交,那么git log为该提交提供了一个新的明显名称数; 但是再次删除它是安全的,只要它不是通过名称找到它的唯一方法.