如何重用现有分支名称作为新分支?
How do I reuse an existing branch name as a new branch?
我的意图是有一个开发分支,我将创建功能分支。那些分支的功能将被合并到 dev 分支,然后 dev 分支将被合并回 master。一些我如何设法搞砸了,我留下了我的开发分支,所以这就是我现在拥有的。
我认为在将 password_rest_and_activation_support 分支合并到 master 后,我可以创建一个新的 "dev" 分支,称为 "dev-new" 或 "development",但我似乎应该能够以某种方式重用 "dev" 名称,但我不确定该怎么做。我在考虑删除现有的开发分支并创建一个新分支?鉴于 dev 分支也在远程上,正确的方法是什么?
git checkout master
git branch -D dev
(强行删除本地dev
)
git push origin :dev
(删除远程dev
)
git checkout -b dev
(创建一个新的本地 dev
分支)
git push origin dev
(将新的 dev
推送到原点)
对于一些非破坏性选项,包括分支重命名,请参阅 。
从根本上说,分支名称就像小便签标签一样。
您可以完全删除标签:
git branch -d foo
这会找到上面带有单词 "foo" 的标签(这个标签贴在一个特定的提交上)并撕下该标签并将其扔掉(再次是标签)。 1
或者,您可以擦掉标签上的名字并在上面写一个新名字:
git branch -m old new
标签仍然停留在同一个提交上,但现在有了不同的名称。
或者,您可以将标签从一个提交移动到另一个:
git branch -f moved 1f0c9447
此处的最后一个参数是原始提交 SHA-1,但您可以使用任何可以定位某个提交的内容,例如另一个分支名称。
"delete and recreate"、"rename" 和 "move" 之间存在一些重要差异,因为这些标签还保留历史记录,其中提交他们在上次搬家之前命名。如果您完全删除标签,历史记录也会消失。如果你重命名一个标签,它会保留它的历史,如果你移动一个标签,它会获得一个新的历史条目,因为你将它从一个提交移到了另一个。
当您进行新提交时,无论您在哪个分支上,该分支标签都会自动移动以指向新提交。此标签移动已记录在其历史记录中。
使用最有意义的选项(您是要保留还是扩充历史记录,还是只想将其丢弃?)。
(注意新建分支时:
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
.
推送
作为旁注,标签几乎与分支完全相同,除了单词 "tag" 之外还有两个很大的区别:它们永远不会 应该 移动(并且不会自动移动),并且它们不记录历史(因为它们不应该需要)。 "Remote branches",又名远程跟踪分支,是它们之间的交叉点。 你不移动它们,即使提交也不行,但它们确实移动:当你的git联系遥控器并选择时新的提交,它也会选择分支标签移动,并更新你的远程跟踪分支和他们的 reflogs。
1您可以随时使用任何标签(使用 -D
,大写)执行此操作,但是如果您删除 last 找到一些提交的标签,这些提交变得不可见——例如,你不会再在 gitk --all
显示中看到它们——最终(大约一个月后)它们将被垃圾收集.
2 与 git 一样,它实际上比这复杂得多:有两种不同的 reflog 过期值,一种用于 "reachable" 对象一个用于 "unreachable" 个对象。 90 天默认值适用于可达对象;无法访问的对象默认为 30 天;并且两个值都可以配置。
此外,特殊的 stash
ref(由 git stash
使用)的默认过期设置为 "never",因此存储不会过期。
我的意图是有一个开发分支,我将创建功能分支。那些分支的功能将被合并到 dev 分支,然后 dev 分支将被合并回 master。一些我如何设法搞砸了,我留下了我的开发分支,所以这就是我现在拥有的。
我认为在将 password_rest_and_activation_support 分支合并到 master 后,我可以创建一个新的 "dev" 分支,称为 "dev-new" 或 "development",但我似乎应该能够以某种方式重用 "dev" 名称,但我不确定该怎么做。我在考虑删除现有的开发分支并创建一个新分支?鉴于 dev 分支也在远程上,正确的方法是什么?
git checkout master
git branch -D dev
(强行删除本地dev
)
git push origin :dev
(删除远程dev
)
git checkout -b dev
(创建一个新的本地 dev
分支)
git push origin dev
(将新的 dev
推送到原点)
对于一些非破坏性选项,包括分支重命名,请参阅
从根本上说,分支名称就像小便签标签一样。
您可以完全删除标签:
git branch -d foo
这会找到上面带有单词 "foo" 的标签(这个标签贴在一个特定的提交上)并撕下该标签并将其扔掉(再次是标签)。 1
或者,您可以擦掉标签上的名字并在上面写一个新名字:
git branch -m old new
标签仍然停留在同一个提交上,但现在有了不同的名称。
或者,您可以将标签从一个提交移动到另一个:
git branch -f moved 1f0c9447
此处的最后一个参数是原始提交 SHA-1,但您可以使用任何可以定位某个提交的内容,例如另一个分支名称。
"delete and recreate"、"rename" 和 "move" 之间存在一些重要差异,因为这些标签还保留历史记录,其中提交他们在上次搬家之前命名。如果您完全删除标签,历史记录也会消失。如果你重命名一个标签,它会保留它的历史,如果你移动一个标签,它会获得一个新的历史条目,因为你将它从一个提交移到了另一个。
当您进行新提交时,无论您在哪个分支上,该分支标签都会自动移动以指向新提交。此标签移动已记录在其历史记录中。
使用最有意义的选项(您是要保留还是扩充历史记录,还是只想将其丢弃?)。
(注意新建分支时:
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
.
作为旁注,标签几乎与分支完全相同,除了单词 "tag" 之外还有两个很大的区别:它们永远不会 应该 移动(并且不会自动移动),并且它们不记录历史(因为它们不应该需要)。 "Remote branches",又名远程跟踪分支,是它们之间的交叉点。 你不移动它们,即使提交也不行,但它们确实移动:当你的git联系遥控器并选择时新的提交,它也会选择分支标签移动,并更新你的远程跟踪分支和他们的 reflogs。
1您可以随时使用任何标签(使用 -D
,大写)执行此操作,但是如果您删除 last 找到一些提交的标签,这些提交变得不可见——例如,你不会再在 gitk --all
显示中看到它们——最终(大约一个月后)它们将被垃圾收集.
2 与 git 一样,它实际上比这复杂得多:有两种不同的 reflog 过期值,一种用于 "reachable" 对象一个用于 "unreachable" 个对象。 90 天默认值适用于可达对象;无法访问的对象默认为 30 天;并且两个值都可以配置。
此外,特殊的 stash
ref(由 git stash
使用)的默认过期设置为 "never",因此存储不会过期。