从另一个分支开始创建不带跟踪的Git分支

13

我想创建一个名为foo的分支(并将其检出),它将从与origin/bar相同的提交开始,但我目前没有检出origin/bar。是否有一行命令可以实现这个目标?


1
从技术上讲,你不能origin/bar作为检出,因为它不是(常规的、本地的)分支。你可以检出远程跟踪分支所指向的提交。通常你想要使用--no-track,就像hvd已经回答的那样。 - torek
4个回答

13

您可以用一个命令完成这个操作:git checkout 允许直接指定 git branch--no-track 选项。

git checkout -b foo --no-track origin/bar

1
有人可以更详细地解释一下吗?这与 --track 有什么不同吗? - MarkHu
很好的答案。为了易读性,我会使用不同的命令顺序(个人偏好):`git checkout -b foo origin/bar --no-track`或者使用下面的命令:`git switch -c foo origin/bar --no-track` - Honza

2

这取决于您是否希望您的新分支跟踪远程 origin/bar

要跟踪远程分支:

git checkout -b foo origin/bar

不跟踪远程:
git checkout -b foo --no-track origin/bar

(您随时可以稍后添加跟踪关系。)

1
这应该可以解决问题:

git branch foo origin/bar
git checkout foo

如果您坚持一行写:

git checkout -b foo origin/bar

-1
Git有一个用于创建这种分支的标志:

https://git-scm.com/docs/git-checkout/

--orphan
创建一个名为的新孤立分支,从开始,并切换到它。在这个新分支上进行的第一次提交将没有父级,它将是一个与所有其他分支和提交完全断开连接的新历史记录的根。

索引和工作树会被调整,就好像您之前运行了git checkout <start_point>一样。

这使您能够开始一个新的历史记录,记录类似于的一组路径,只需轻松运行git commit -a即可进行根提交。

当您想要发布某个提交的树而不暴露其完整历史记录时,这可能非常有用。您可能希望这样做,以发布项目的开源分支,其当前树为clean,但其完整历史记录包含专有或受限制的代码片段等。

如果您想要开始记录与完全不同的一组路径的断开历史记录,则应该在创建孤立分支后立即清除索引和工作树,方法是从工作树的顶层运行git rm -rf .。之后,您将准备好通过从其他地方复制文件、提取tarball等来准备您的新文件,重新填充工作树。


这似乎不是 OP 所要求的。我在问题中没有看到任何提到断开历史记录的内容,他们只想从现有分支分支而出,而不必先检查它。 - Dan Lowe
我同意,再次阅读问题时,我最初的理解是他想要没有历史记录的分支 :-) - CodeWizard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接