2015-01-09 78 views
1

我的意图是有一个开发分支,我会创建功能分支。那些分支功能将被合并到开发分支中,然后开发分支将被合并回主控。一些我如何设法解决这个问题,并将我的开发分支留下,所以这就是我现在拥有的。如何将现有分支名称重新用作新分支?

enter image description here

我认为合并password_rest_and_activation_support支进主后,我可以创造一个新的“开发”分支,名为“开发新”或“发展”,但我好像我应该能够以某种方式重用“开发”名称,但我不知道如何做到这一点。我正在考虑删除现有的开发分支并创建一个新分支?考虑到开发分支也在偏远地区,正确的方法是什么?

+2

科GIT中是一个简单的指针到变更。如果你想“重新使用”一个分支 - 只需放下它并再次创建。 – zerkms

+0

这就是我想到的,通过删除,你的意思是删除分支,对 - 对不起,我通常不会做任何与git – nPn

回答

3
git checkout master 
git branch -D dev 

(强制删除本地dev

git push origin :dev 

(删除远程dev

git checkout -b dev 

(创建新的本地dev分支)

git push origin dev 

(推新dev来源)

对于一些非破坏性选项,包括分支重命名,请参见torek's answer

5

基本上,分支名称的工作方式类似于小粘滞标签。

您可以完全删除标签:

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 clonegit fetch,也不符合git push推。


作为一个侧面说明,标签几乎是完全一样的分支,有两个大的差异不仅仅是单词“标签”其他:他们从来没有应该移动(而不会自动移动),并且他们不记录历史(因为他们不应该需要之一)。 “远程分支机构”,又名远程追踪分支机构,在这些之间有点相互交叉。 不动他们,甚至没有通过使提交,但他们招:当你的git的联系远程和拿起新的提交,也拿起分支标签的动作,并更新你的远程跟踪分支和他们的推荐日志。


你可以使用任何标签在任何时候做到这一点(与-D,大写),但如果你删除最后标签,该标签找到一些承诺(S),这些提交隐身,你例如在gitk --all中不会看到它们,最终(大约一个月后)它们将被垃圾收集。

与往常一样,它实际上比这更复杂:有两种不同的reflog过期值,一个用于“可达”对象,另一个用于“不可达”对象。 90天的默认值是可访问的对象;无法访问的对象默认为30天;并且可以配置两个值。

此外,特殊stash ref(由git stash使用)的默认过期时间设置为“never”,因此存储过期不会过期。

+0

复杂的事情“,因为这些标签还保留了历史记录,其中提交了他们在最后他们被移动的时间,如果你完全删除了一个标签,历史也会消失“---呃,请你说说这个吗?是否有元数据更改的分离图? “ – zerkms

+0

”此标签移动记录在其历史记录中。“ ---请在此。我从未见过你在说什么。 – zerkms

+0

从我所知道的:1. git reflog仅在本地2.它在gc期间被清理。牢记这一点 - 是否重要*保留历史(只要它是本地的并且将会丢失)? – zerkms

相关问题