Git 如何将现有分支名称重新用作新分支?
我的目的是要有一个开发分支,我将创建功能分支。那些被分支的特性将被合并到dev分支中,然后dev分支将被合并回master。我是如何把事情搞砸的,我把我的开发分支留下了,下面是我现在拥有的 我认为,在将password\u rest\u和\u activation\u support分支合并到master之后,我可以创建一个新的“dev”分支,称为“dev new”或“development”,但我似乎应该能够以某种方式重用“dev”名称,但我不确定如何做到这一点。我正在考虑删除现有的dev分支并创建一个新分支?考虑到dev分支也位于远程服务器上,正确的方法是什么Git 如何将现有分支名称重新用作新分支?,git,Git,我的目的是要有一个开发分支,我将创建功能分支。那些被分支的特性将被合并到dev分支中,然后dev分支将被合并回master。我是如何把事情搞砸的,我把我的开发分支留下了,下面是我现在拥有的 我认为,在将password\u rest\u和\u activation\u support分支合并到master之后,我可以创建一个新的“dev”分支,称为“dev new”或“development”,但我似乎应该能够以某种方式重用“dev”名称,但我不确定如何做到这一点。我正在考虑删除现有的dev分
git checkout master
git branch -D dev
(强制删除本地dev
)
(删除远程dev
)
(创建新的本地dev
分支)
(将新的dev
推送到原点)
有关一些非破坏性选项(包括分支重命名),请参见 从根本上讲,分支名称就像小便笺标签一样工作 您可以完全删除标签:
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
相同的提交
分支历史记录保存在每个分支的数据库中。
HEAD也有一个ref日志,git reflog
向您显示该日志,但是git reflog show foo
显示历史记录以供参考(通常是分支)foo
此历史记录通常保存90天。2此外,它完全是本地的:不会在git clone
和git fetch
上复制,也不会使用git push
推送
作为旁注,标记几乎与分支完全相同,除了“标记”这个词外,还有两个很大的区别:它们不应该移动(也不会自动移动),它们不记录历史(因为它们不应该需要历史记录)。“远程分支”,也称为远程跟踪分支,是这些分支之间的交叉点。您不会移动它们,即使是通过提交也不会,但它们确实会移动:当您的git联系远程服务器并接收新的提交时,它还会接收分支标签移动,并更新远程跟踪分支及其重登录
1您可以在任何时间使用任何标签(大写为-D
)执行此操作,但如果删除最后一个发现某些提交的标签,这些提交将不可见,您将无法在gitk中看到它们,例如,所有的将不再显示,最终(大约一个月后)它们将被垃圾回收
2与git一样,它实际上要复杂得多:有两个不同的reflog到期值,一个用于“可访问”对象,另一个用于“不可访问”对象。90天的默认值适用于可访问对象;无法访问的对象默认为30天;这两个值都可以配置
此外,特殊的stash
ref(由使用)将其默认过期设置为“从不”,这样stash就不会过期。“因为这些标签还保留历史记录,在上次移动标签之前提交它们命名的历史记录。如果完全删除标签,历史记录也会消失”--嗯,你能解释一下吗?元数据更改是否有一个单独的图表?“此标签移动记录在其历史记录中。”---请在此图表上。我从来没见过你在说什么。git reflog仅为本地版本2。在gc过程中对其进行清理。记住这一点-保留历史记录(只要它是本地的并且无论如何都会丢失)有那么重要吗?@nPn:not withgit branch
,它只会移动一个分支;而且,git update ref
没有“移动”选项,因此要使其正常工作,必须复制reflog。不过,一般来说,远程reflogs只在git remote update
或git fetch
上更新。
git branch -m old new
git branch -f moved 1f0c9447
git branch new