我的意图是建立一个dev分支,我将创建功能分支。这些特征分支将合并到dev分支中,然后dev分支将合并回master。一些我如何设法搞砸了,我离开了我的开发分支,所以这就是我现在拥有的。
我认为在将password_rest_and_activation_support分支合并到master之后,我可以创建一个新的" dev"分支,称为" dev-new"或者"开发",但我似乎应该能够以某种方式重用" dev"名字,但我不知道该怎么做。我想删除现有的dev分支并创建一个新的分支?考虑到dev分支也在遥控器上,这样做的正确方法是什么?
答案 0 :(得分:7)
从根本上说,分支名称就像小粘签标签一样。
您可以完全删除标签:
git branch -d foo
这会找到带有" foo"在它上面(这个标签贴在一个特定的提交上)并将标签剥离并将其(标签,再次)扔掉。 1
或者,您可以删除标签上的名称并在其上写下新名称:
git branch -m old new
标签仍然停留在同一个提交中,但现在它有一个不同的名称。
或者,您可以将标签从一个提交移动到另一个提交:
git branch -f moved 1f0c9447
这里的最后一个参数是原始提交SHA-1,但您可以使用任何定位某些提交的内容,例如另一个分支名称。
"删除和重新创建","重命名"和"移动"之间的一些重要差异,因为这些标签也是保留历史记录,这些历史记录是在上一次移动之前命名的。如果您完全删除标签,则历史记录也会消失。如果重命名标签,它会保留其历史记录,如果移动标签,它会获取新的历史记录条目,因为您将其从一个提交移动到另一个提交。
当您进行新的提交时,无论您使用何种分支,该分支标签都会自动移动,指向新的提交。此标签移动记录在其历史记录中。
使用哪个选项最有意义(您希望保留或扩充历史记录,还是仅仅希望将其丢弃?)。
(请注意,当您创建新分支时:
git branch new
您可以提供原始提交SHA-1或任何发现提交的内容。因此git branch new existing
会使新分支new
指向与existing
相同的提交。)
分支历史记录保存在每个分支"reflog"中。还有HEAD
的参考日志,git reflog
向您展示了一个,但git reflog show foo
显示了参考历史(通常为分支)foo
。
此历史通常会保留90天。 2 此外,它纯粹是本地的:它不会被git clone
和git fetch
复制,也不会被推送与git push
。
作为旁注,标签与分支几乎完全相同,除了单词"标记"之外还有两个很大的区别:它们永远不会假设到移动(并且不会自动移动),并且他们不会记录历史记录(因为他们不应该需要一个)。 "远程分支",又名远程跟踪分支,在这些分支之间有点交叉。 你移动它们,甚至不通过提交,但它们做移动:当你的git联系遥控器并获取新的提交时,它也会启动branch-label移动,并更新远程跟踪分支及其reflog。
1 您可以随时使用任何标签(-D
,大写)执行此操作,但如果您删除发现某些提交的 last 标签(s),那些提交变得不可见 - 例如,你在gitk --all
显示中不会再看到它们 - 并且最终(大约一个月后)它们将被垃圾收集。
2 与git一样,它实际上要复杂得多:有两个不同的reflog到期值,一个用于"可达"对象和一个用于"无法到达"对象。 90天默认值是可达对象;无法到达的对象默认为30天;并且可以配置这两个值。
此外,特殊stash
引用(由git stash
使用)的默认到期时间设置为"从不",以便存储不会过期。
答案 1 :(得分:4)
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。