[英]How to create the branch from specific commit in different branch
我在master分支中做了几次提交,然后将它们合并到dev分支。
我想从dev分支中的特定提交创建一个分支,它首先在master分支中提交。
我使用了命令:
git checkout dev
git branch <branch name> <commit id>
但是,这会从master分支创建分支,而不是我期望的dev分支。 master分支和dev分支中的commit id相同。 那么,我如何区分不同分支中的相同提交ID?
PS:我在github上做了一个例子https://github.com/RolandXu/test_for_branch
我使用了命令:
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
我期望的是测试分支包含aa.txt bb.txt cc.txt。 但是,测试分支仅包含aa.txt和cc.txt。 它很可能是从主分支创建了分支。
如果您使用这种形式的branch
命令(带起点),则HEAD
位置无关紧要。
你在做什么:
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
首先,将HEAD
设置为分支dev
,
其次,在commit 07aeec98
上启动一个新分支。 此提交中没有bb.txt(根据您的github repo)。
如果要在刚刚签出的位置启动新分支,可以运行没有起始点的分支:
git branch test
或者像其他人一样,在一次操作中分支和结账:
git checkout -b test
我认为你可能会因为07aeec98
是分支dev
一部分而感到困惑。 确实,这个提交是dev
的祖先,它需要进行更改以达到dev
的最新提交。 但是,它们是达到最新dev
所需的其他提交,这些不一定是07aeec98
的历史。
8480e8ae
(您添加bb.txt的地方)不在07aeec98
的历史记录中。 如果从07aeec98
分支,则不会得到8480e8ae
引入的8480e8ae
。
换句话说:如果将分支A和分支B合并到分支C中,然后在提交A时创建新分支,则不会获得B中引入的更改。
在这里,你有两个并行分支master和dev,你在dev中合并。 从master的提交(比合并更早)分支将不会为您提供dev的更改。
如果要将master中的新更改永久集成到功能分支中,则应将master
合并到其中并继续。 但是,这将在您的功能分支中创建合并提交。
如果您尚未发布功能分支,则还可以在更新的主分支上重新定义它们: git rebase master featureA
。 准备好解决可能的冲突。
如果您想要一个工作流程,您可以在其中处理没有合并提交的功能分支,并且仍然可以与master中的较新更改集成,我建议您执行以下操作:
dev
分支 dev
。 不要直接提交到dev
,只将它用于合并其他分支。
例如,如果您正在处理功能A和B:
a---b---c---d---e---f---g -master
\ \
\ \-x -featureB
\
\-j---k -featureA
将分支合并到dev
分支以检查它们是否与新主服务器配合良好:
a---b---c---d---e---f---g -master
\ \ \
\ \ \--x'---k' -dev
\ \ / /
\ \-x---------- / -featureB
\ /
\-j---k--------------- -featureA
您可以继续处理功能分支,并定期将主数据库和功能分支的新更改合并到dev
。
a---b---c---d---e---f---g---h---i----- -master
\ \ \ \
\ \ \--x'---k'---i'---l' -dev
\ \ / / /
\ \-x---------- / / -featureB
\ / /
\-j---k-----------------l------ -featureA
当需要集成新功能时,将功能分支(不是dev
!)合并到master中。
您的参数顺序错误:
git branch <branch-name> <commit>
为此,检查哪个分支并不重要; 它会做你说的。 (如果省略commit参数,则默认在与当前参数相同的位置创建分支。)
如果要在创建时检出新分支:
git checkout -b <branch> <commit>
如果省略commit参数,则具有相同的行为。
你必须做:
git branch <branch_name> <commit>
(您正在交换分支名称并提交)
或者你可以这样做:
git checkout -b <branch_name> <commit>
如果代替您使用分支名称,您将从分支的末端获得分支。
尝试
git checkout <commit hash>
git checkout -b new_branch
提交应该只在树中存在一次,而不是在两个单独的分支中存在。
这允许您检查特定的提交并为其命名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.