我有两个分支:master 和 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 这样的分支模型中。
如果您喜欢您发布的链接中的方法,请查看 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
你会看到你想要的样子。
如果您想从 Git 中的任何现有分支创建新分支,只需按照选项操作即可。
首先更改/签出到要创建新分支的分支。例如,如果您有以下分支,例如:
掌握
开发者
分支1
因此,如果您想在名为“branch1”的分支下创建一个名为“subbranch_of_b1”的新分支,请按照以下步骤操作:
签出或更改为“branch1” git checkout branch1 现在使用以下命令在“branch1”下创建名为“subbranch_of_b1”的新分支。 git checkout -b subbranch_of_b1 branch1 上面将在分支 branch1 下创建一个名为 subbranch_of_b1 的新分支(请注意,上述命令中的 branch1 不是强制性的,因为 HEAD 当前指向它,如果您在不同的分支虽然)。现在,在使用 subbranch_of_b1 之后,您可以在本地或远程提交和推送或合并它。
https://i.stack.imgur.com/6qEWk.jpg
将 subbranch_of_b1 推送到远程
git push origin subbranch_of_b1
git checkout -b some-branch
是否是 git checkout -b some-branch master
的简写。原来 git checkout -b some-branch
是 git checkout -b some-branch <current_active_branch>
的简写
创建一个分支
签出主分支时创建分支。这里 master 中的提交将同步到您创建的分支。 $ git 分支分支 1
签出 branch1 时创建分支。这里 branch1 中的提交将同步到 branch2 $ git branch branch2
结帐一个分支
git checkout 命令切换分支或恢复工作树文件
git checkout 分支名称
重命名分支
git 分支 -m 分支 1 新分支名称
删除分支
git branch -d 分支删除
git branch -D branch-to-delete(强制删除而不检查合并状态)
创建和切换分支
git checkout -b 分支名
完全包含的分支
git 分支 --merged
****************************** 分支差异 [ git diff branch1..branch2 ] ************** **********
多行差异
git diff master..branch1
单行差异
git diff --color-words branch1..branch2
git push origin :old-name new-name
删除旧名称远程分支并推送新名称本地分支。
从另一个分支在 git 中创建分支的各种方法:
这个答案增加了一些额外的见解,现有答案中还没有,仅涉及问题本身的标题(从另一个分支在 Git 中创建一个分支),但没有解决已经有足够答案的问题的更狭窄细节这里。
我之所以添加这个,是因为我现在真的需要知道如何在下面执行#1(从我没有签出的分支创建一个新分支),而且如何做到这一点并不明显,谷歌搜索导致到这里作为热门搜索结果。所以,我将在这里分享我的发现。如果有的话,这里的任何其他答案都没有很好地涉及到这一点。
在此期间,我还将在下面添加我在常规工作流程中使用的其他最常见的 git branch
命令。
1. 要从您尚未签出的分支创建新分支:
在您签出任何分支时从 branch1
创建 branch2
(例如:假设您已签出 master
):
git branch branch2 branch1
一般格式为:
git branch <new_branch> [from_branch]
man git branch
如下所示。我所说的 <new_branch>
就是他们所说的 <branchname>
,我所说的 [from_branch]
就是他们所说的 [<start-point>]
:
git 分支 [--track | --no-track] [-l] [-f]
2. 要从您已签出的分支创建新分支:
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-1320hrs
部分是格式为 YYYYMMDD-HHMMhrs
的日期和时间,即 2020 年 8 月 14 日 13:20 小时(下午 1:20)。这样我可以轻松找到备份分支,直到我确定我已经准备好删除它们了。如果你不这样做并且你搞砸了,你必须在搞砸之前使用 git reflog
去找到你的分支,这更加困难,压力更大,更容易出错。
感叹词:关于 git checkout 与 git switch 的注释
可以做 1000 件事的经典通用“瑞士军刀”:git checkout。 git checkout 的新的和实验性的替代命令:git switch + git restore。
git switch
最近在 Git v2.23 中添加。使用 git --version
查看您的 git 版本。它被设计为 git checkout
的一种极其有限的形式,仅用于切换分支,而不是像 git checkout
那样具有签出或恢复文件的能力。在此处阅读更多信息:https://www.git-tower.com/learn/git/commands/git-switch.
另请参阅:What does git checkout still do after git switch got introduced?。 git restore
提供了 git switch
不包含的 git checkout
的一些其余功能。
man git switch
和 man git restore
警告:
此命令是实验性的。行为可能会改变。
因此,如果您愿意,请随意使用 git checkout
。它的行为不太可能改变。
我自己几乎只使用 git checkout
,但如果您愿意,欢迎您使用 git switch
(和 git restore
来恢复或“签出”文件)。
3. 要从您已签出的分支创建并签出新分支:
# the standard, "classic" command most people still use; `-b` stands
# for "create 'b'ranch"
git checkout -b new_branch
# the newer, "experimental" command now available as of Git v2.23; `-c` stands
# for "'c'reate branch"
git switch -c new_branch
为了清楚那里发生的事情,请知道上面的这个命令等同于这两个单独的命令:
# classic
git branch new_branch
git checkout new_branch
# OR: new/experimental as of Git v2.23
git branch new_branch
git switch new_branch
4. 要从您尚未签出的分支创建和签出新分支:
# classic
git checkout -b new_branch from_branch
# OR: new/experimental as of Git v2.23
git switch -c new_branch from_branch
为了清楚那里发生的事情,请知道上面的这个命令等同于这三个单独的命令:
# classic
git checkout from_branch
git branch new_branch
git checkout new_branch
# OR: new/experimental as of Git v2.23
git switch from_branch
git branch new_branch
git switch new_branch
5.重命名分支
就像重命名终端中的常规文件或文件夹一样,git
认为“重命名”更像是一个 'm'ove 命令,因此您使用 git branch -m
重命名分支。这是一般格式:
git branch -m <old_name> <new_name>
man git branch
显示如下:
git 分支 (-m | -M) [
示例:让我们将 branch_1
重命名为 branch_1.5
:
git branch -m branch_1 branch_1.5
或者,如果您已签出 branch_1
,则可以将 currently-checked-out 分支 重命名为 branch_1.5
,如下所示:
git branch -m branch_1.5
也可以看看:
我经常参考并认为是“git 基础知识”的答案的快速链接: 从另一个分支在 git 中创建分支的各种方法 所有关于在 git 中检查文件或目录的内容 谁是“我们”,谁是“他们”吉特?如何通过 --diff-filter= 使用 git diff 过滤器
git checkout
同时关注分支和切换到创建的分支。
要从本地目录中的另一个分支创建分支,您可以使用以下命令。
git checkout -b <sub-branch> branch
例如:
要创建的新分支的名称 'XYZ'
必须在其下创建 XYZ 的分支 ABC 的名称
git checkout -b XYZ ABC
Git 2.23 引入 git switch
和 git restore
来拆分 git checkout
的职责
从 git 2.23 的现有分支创建新分支:
git switch -c my-new-branch
切换到新分支“我的新分支”
-c 是 --create 的缩写,它取代了众所周知的 git checkout -b
查看 this Github 博客文章,更详细地解释更改:
Git 2.23 为现有的套件带来了一对新的实验性命令:git switch 和 git restore。这两个旨在最终为众所周知的 git checkout 提供更好的界面。新的命令打算每个都有一个明确的分离,巧妙地划分了 git checkout 的许多职责
在 dev
分支上同时工作。发生的情况是,在您的场景中,功能分支从 dev 分支的尖端向前移动,但 dev 分支不会改变。它更容易画成一条直线,因为它可以被认为是向前运动。您到达了 dev 上的 A 点,然后您只需继续沿着平行路径前进。这两个分支并没有真正分道扬镳。
现在,如果您在 dev 上进行提交,在合并之前,您将再次从同一个提交 A 开始,但现在功能将转到 C,将 dev 转到 B。这将显示您尝试可视化的拆分,作为分支现在已经分道扬镳了。
*-----*Dev-------*Feature
相对
/----*DevB
*-----*DevA
\----*FeatureC
如果您想从另一个分支创建一个分支,请按照以下步骤操作:
假设:
您目前在 master 分支中。您没有要提交的更改。 (如果您有任何更改要提交,请将其隐藏起来!)。 BranchExisting 是您需要从中创建一个名为 BranchMyNew 的新分支的分支的名称。
脚步:
将分支获取到本地计算机。 $ git fetch origin BranchExisting : BranchExisting
此命令将在您的本地创建一个具有相同分支名称的新分支。
现在,从 master 分支 checkout 到新获取的分支 $ git checkout BranchExisting 你现在在 BranchExisting 中。现在从这个现有分支创建一个新分支。 $ git checkout -b BranchMyNew
干得好!
要从另一个分支创建分支,也可以使用以下语法:
git push origin refs/heads/<sourceBranch>:refs/heads/<targetBranch>
它比“git checkout -b”+“git push origin”短一点
切换到开发分支:
$ 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
它对我有用:
转到您的 github 存储库并选择要从中创建新分支的分支名称,如下图所示
https://i.stack.imgur.com/5IJ1R.png
然后键入您要创建的分支名称,然后单击创建分支。
https://i.stack.imgur.com/h2trv.png
不定期副业成功案例分享
dev
合并后推送myFeature
的重要性是什么?myFeature
分支在合并之前被推送到服务器,那么什么都没有。但如果myFeature
尚未推送到服务器并且您希望它出现在服务器中,则必须将其推送到 appart。git checkout -b myFeature dev
是否与以下 3 个命令相同:git checkout dev
,然后是git branch myFeature
,然后是git checkout myFeature
?--no-ff
merge looks like