我有两个分支:主和 dev
我想从 dev 分支创建一个“功能分支”。
目前在分支机构开发中,我做了:
$ git checkout -b myfeature dev
......(有些工作)
$ git commit -am "blablabla"
$ git push origin myfeature
但是,在对我的树枝进行可视化之后,我得到了:
--**master**
------0-----0-----0-----0-----0
------------------------**dev**----**myfeature**
我的意思是分支似乎合并了,我不明白为什么......
我做错了什么?
您能解释一下我如何从另一个分支机构分支出来并推回功能分支的远程存储库吗?
分支模型中的所有内容,例如the one described here。
答案 0 :(得分:1077)
如果您喜欢所发布链接中的方法,请查看Git Flow。
这是他为该工作流程创建的一组脚本。
但要回答你的问题:
$ git checkout -b myFeature dev
在dev上创建MyFeature分支。做你的工作然后
$ git commit -am "Your message"
现在将您的更改合并到dev而不需要快进
$ git checkout dev
$ git merge --no-ff myFeature
现在将更改推送到服务器
$ git push origin dev
$ git push origin myFeature
你会看到你想要它。
答案 1 :(得分:300)
如果你想从Git的任何现有分支创建一个新的分支,只需按照选项。
首先更改/签出到您要创建新分支的分支。例如,如果您有以下分支,例如:
因此,如果您想在名为 " branch1&的分支下创建名为 " subbranch_of_b1" 的新分支#34; 按照以下步骤操作:
结帐或更改为" branch1"
git checkout branch1
现在使用以下命令在&#34; branch1&#34; 下创建名为&#34; subbranch_of_b1&#34; 的新分支。< / p>
git checkout -b subbranch_of_b1 branch1
以上将在分支 branch1 下创建一个名为 subbranch_of_b1 的新分支(请注意,上述命令中的branch1
不是强制性的,因为HEAD目前指向它,如果你在不同的分支上,你可以精确地说明。)
现在使用 subbranch_of_b1 后,您可以在本地或远程提交,推送或合并。
将subbranch_of_b1推送到远程
git push origin subbranch_of_b1
答案 2 :(得分:26)
创建分支
$ git branch branch1
$ git branch branch2
结帐分行
git checkout命令切换分支或恢复工作树文件
$ git checkout branchname
重命名分支
$ git branch -m branch1 newbranchname
删除分支
$ git branch -d branch-to-delete
$ git branch -D branch-to-delete
(强制删除而不检查合并状态)创建并切换分支
$ git checkout -b branchname
完全包含的分支
$ git branch --merged
************************** 分支差异 [git diff branch1..branch2] **** ********************
多线差异$ git diff master..branch1
$ git diff --color-words branch1..branch2
答案 3 :(得分:13)
在dev
分支上同时进行工作。会发生的情况是,在您的场景中,功能分支从dev分支的尖端向前移动,但dev分支不会更改。绘制成直线更容易,因为它可以被认为是向前运动。你在dev上指向A,然后从那里继续沿着平行路径行进。这两个分支并没有真正分歧。
现在,如果你在dev上进行提交,在合并之前,你将再次从同一个提交开始,A,但是现在功能将转到C并且dev转到B.这将显示你试图可视化的分割,因为分支机构现在分歧了。
*-----*Dev-------*Feature
对战
/----*DevB
*-----*DevA
\----*FeatureC
答案 4 :(得分:5)
Git 2.23引入了git switch
和git restore
来划分git checkout
的职责
从git 2.23开始,从现有分支创建新分支:
git switch -c my-new-branch
切换到新的分支“ my-new-branch”
看看this的Github博客文章,其中详细介绍了更改:
Git 2.23在现有的套件中带来了一对新的实验命令 一个: git switch 和 git restore 。这两个是为了最终 为众所周知的git checkout提供更好的界面。新的 各个命令打算清楚地分开,整齐地划分 git checkout
的职责是什么
答案 5 :(得分:2)
如果要从另一个分支中创建一个分支,请按照以下步骤操作:
假设:
BranchExisting
是分支的名称,您需要从该分支中创建一个名称为BranchMyNew
的新分支。步骤:
将分支获取到本地计算机。
$ git fetch origin BranchExisting : BranchExisting
此命令将在您的本地使用相同的分支名称创建一个新分支。
现在,从主分支结帐到新获取的分支
$ git checkout BranchExisting
您现在位于BranchExisting中。现在,从现有分支创建一个新分支。
$ git checkout -b BranchMyNew
您在这里!
答案 6 :(得分:2)
此答案增加了一些额外的见解,而这些见解仅存在于问题本身的 title 中(从另一个分支在Git中创建分支) ,但 not 不能解决问题的较窄细节,而在这里已经有足够的答案了。
我要添加它是因为我现在真的需要知道如何做下面的#1(从一个我尚未签出的分支中创建一个新分支),而且这样做的方式也不明显。 Google搜索导致此处是最佳搜索结果。因此,我将在这里分享我的发现。这里的任何其他答案都没有很好地涉及到这一点。
在此过程中,我还将在下面的常规工作流程中添加其他最常用的git branch
命令。
在任何已签出的分支(例如:假设您已经签出branch2
的情况下,从branch1
创建master
:
git branch branch2 branch1
一般格式为:
git branch <new_branch> [from_branch]
man git branch
将其显示为:
git branch [--track | --no-track] [-l] [-f] <branchname> [<start-point>]
git branch new_branch
这非常适合在重新设置基准,压扁,硬重置等之前进行备份-在执行任何可能严重破坏分支机构的操作之前。
例如:我在feature_branch1
上,我将使用git rebase -i master
将20次提交压缩为1次。万一我想“撤消”,让我们先备份该分支!我这样做 ALL ... THE ... TIME ,并发现我总是可以轻松回到该备份分支并重新分支,这对我非常有帮助和安慰为了在此过程中弄乱feature_branch1
的情况下再次尝试:
git branch feature_branch1_BAK_20200814-1320hrs_about_to_squash
20200814-1120hrs
部分是日期和时间,格式为YYYYMMDD-HHMMhrs
,所以在2020年8月14日应该是13:20hrs(1:20 pm)。这样我就可以轻松地找到我的备份将分支,直到确定可以删除它们为止。如果您不这样做,就会陷入困境,那么必须先使用git reflog
来查找分支,然后再把它弄乱,这将变得更加困难,压力更大并且更容易出错。
git checkout -b new_branch
git
就像在终端中重命名常规文件或文件夹一样,认为“重命名”更像是'm'ove命令,因此您可以使用git branch -m
重命名分支。这是常规格式:
git branch -m <old_name> <new_name>
man git branch
如下所示:
git branch (-m | -M) [<oldbranch>] <newbranch>
示例:让我们将branch_1
重命名为branch_1.5
:
git branch -m branch_1 branch_1.5
答案 7 :(得分:1)
要从本地目录中的另一个分支创建分支,可以使用以下命令。
git checkout -b <sub-branch> branch
git checkout -b XYZ ABC
答案 8 :(得分:1)
切换到开发分支:
$ git checkout develop
创建开发的feature / foo分支。
$ git checkout -b feature/foo develop
无需快速前进即可合并更改以进行开发
$ git checkout develop
$ git merge --no-ff myFeature
现在将更改推送到服务器
$ git push origin develop
$ git push origin feature/foo
答案 9 :(得分:0)
要从另一个分支创建分支,也可以使用以下语法:
git push origin refs/heads/<sourceBranch>:refs/heads/<targetBranch>
比“ git checkout -b” +“ git push origin”要短一些