创建没有本地提交的新分支

Posted

技术标签:

【中文标题】创建没有本地提交的新分支【英文标题】:Create new branch without local commits 【发布时间】:2019-06-28 00:35:10 【问题描述】:

我在当前名为“foo”的分支中进行了一些更改。

我想从当前分支创建一个名为“bar”的新分支。

但新分支不应包含我当前分支中的任何更改(我本地系统中的已提交更改)。

例子

$ git clone ssh://svc@somerepo.git
$ cd somerepo
$ ls
test1 test2 test3
$ cat test1 test2 test3
< no output, all these 3 files are empty >
$ echo "testing" >> test1
$ git commit -am "test"

现在我需要从当前分支创建一个名为 new-branch 的新分支,该分支不应包含任何更改 - 例如“测试”提交的更改(意味着所有上述 3 个文本文件都不包含任何内容)并推送到远程。

我们有什么办法吗?

【问题讨论】:

【参考方案1】:

在 Github 上,输入你想要的新分支名称,系统会询问你——从哪个分支创建这个新分支

【讨论】:

【参考方案2】:

我想从当前分支创建一个名为“bar”的新分支。

但新分支不应包含我当前分支中的任何更改。

由于您指定不希望 本地 在 foo 中提交,但您希望将这些提交包含在远程分支上,因此不应创建分支 bar来自本地分支foo,但来自远程foo 分支:

git checkout -b bar origin/foo

这将在您的原始存储库中foo 的当前状态上创建分支bar,即不包含foo 上的本地提交。

【讨论】:

我也不想基于 master 创建分支。因为我们在 foo 分支中做了很多改变。我只是不希望我的本地提交成为新分支的一部分。【参考方案3】:

是的,这是可能的。

这是你的 git 树:

----A---*            <---master

Commit A 已提交 3 个空文件。目前您已对文件test1 进行了更改,但尚未提交。所以在这种情况下你只需要使用命令创建一个新分支

git checkout -b "new-branch"

这将创建:

      ---*            <---master
     /
----A                 <--- new-branch

这是基本的 git。您从提交 ID 创建分支。甚至可以从提交 ID 创建分支/标签/等。检查here

一旦你创建了你的新分支,你就可以使用它来推送它

git push --set-upstream origin new_branch

【讨论】:

不,如果您在我的问题中看到我的示例,我已经提交了更改。我只不希望在我的新分支中没有被推送到远程分支的本地提交。 @smc 哦,我的错。错过了

以上是关于创建没有本地提交的新分支的主要内容,如果未能解决你的问题,请参考以下文章

Git分支怎么切换到远端分支

码云git使用四(分支的创建,使用和合并)

git本地分支推送到远程分支

Git创建远程分支

Git 创建远程分支并提交代码到远程分支

本地分支和远程分支的创建与合并