基本上,分支名称的工作方式类似于小粘滞标签。
您可以完全删除标签:
git branch -d foo
此发现上面有字“富”的标签(标识粘贴在一个特定的提交)和标签,把果皮和抛出它(标签,再次)走了。
或者,您可以擦除标签上的名称,并在上面写一个新的名字:
git branch -m old new
标签仍然停留在相同的承诺,但现在它有一个不同的名称。
或者,你可以从一个移动的标签提交到另一个:
git branch -f moved 1f0c9447
这里的最后一个参数是原始提交SHA-1,但你可以使用任何定位的一些承诺,如另一支名称。
有之间是“删除并重新创建”,“重命名”和“移动”一些重要的差异,因为这些标签还保留历史记录,其中提交他们,他们的移动以前最后一次命名。如果您完全删除标签,历史记录也会消失。如果您重命名标签,则它将保留其历史记录,并且如果您移动标签,它会获取新的历史记录,因为您已将其从一个提交移至另一个提交。
当你做出新的提交时,无论你在哪个分支上,该分支标签自动移动,指向新的提交。此标签移动记录在其历史记录中。
使用哪个选项最有意义(做你想做历史保留或增强,或者你只是希望它抛出了?)。
(请注意,当你创建一个新的分支:
git branch new
您可以提供原始提交SHA-1,或任何发现提交于是git branch new existing
将使新的分支new
指向同一个commit为existing
。)
分支历史记录保存在每个分支的"reflog"。有一个裁判,日志HEAD
,以及,git reflog
显示你的那一个,但git reflog show foo
显示以供参考(通常,分支)foo
历史。
这段历史通常保持为90天。 此外,它是纯粹的地方:它不被复制的git clone
和git fetch
,也不符合git push
推。
作为一个侧面说明,标签几乎是完全一样的分支,有两个大的差异不仅仅是单词“标签”其他:他们从来没有应该移动(而不会自动移动),并且他们不记录历史(因为他们不应该需要之一)。 “远程分支机构”,又名远程追踪分支机构,在这些之间有点相互交叉。 您不动他们,甚至没有通过使提交,但他们做招:当你的git的联系远程和拿起新的提交,也拿起分支标签的动作,并更新你的远程跟踪分支和他们的推荐日志。
你可以使用任何标签在任何时候做到这一点(与-D
,大写),但如果你删除最后标签,该标签找到一些承诺(S),这些提交隐身,你例如在gitk --all
中不会看到它们,最终(大约一个月后)它们将被垃圾收集。
与往常一样,它实际上比这更复杂:有两种不同的reflog过期值,一个用于“可达”对象,另一个用于“不可达”对象。 90天的默认值是可访问的对象;无法访问的对象默认为30天;并且可以配置两个值。
此外,特殊stash
ref(由git stash
使用)的默认过期时间设置为“never”,因此存储过期不会过期。
科GIT中是一个简单的指针到变更。如果你想“重新使用”一个分支 - 只需放下它并再次创建。 – zerkms
这就是我想到的,通过删除,你的意思是删除分支,对 - 对不起,我通常不会做任何与git – nPn