之前合并代码操作,发现合并了我并不需要的区域,具体操作如下。
分支的结构大致为:
A — 1a提交(对1.txt 加入一行内容:11111) 一 2a提交(对1.txt 加入一行内容:22222) --- 3a提交(对1.txt 加入一行内容:33333)
##一条分支(A分支)每一个提交均对1.txt 文件增加一行内容。
A — b1提交(对1.txt 加入一行内容:44444)
##与A分支同源,创建的B分支,在该分支基础上对1.txt文件增加一行内容。
当前分支结构
A — 1a 一 2a --- 3a
b1
期望结果
A — b1 — 3a
那么此时我进行git rebase 操作,想将A分支的a3更改内容 移植&变基 至B分支的最新提交之后:
git rebase --onto B hashid_a2 hashid_a3
没问题吧,这种操作目的是 将a3 内容:1.txt 增加33333,这个操作 拉到B分支上,冲突解决完毕在1.txt上应该是 显示 33333和44444.
但是事实上报出冲突后,打开1.txt 竟然显示所冲突的位置包含了 11111、22222内容字段。这个我就不太理解了,为什么rebase 、cherry-pick 会合并该提交更改之外的内容,不应该是只合并操作吗(在1.txt文件内增加一行33333)?
还望各位解答。我人都懵了,对git 理解的概念都快崩塌了。
git rebase --onto B hashid_a2 hashid_a3
这个命令执行完,并解决冲突后,就将 A 分支 1.txt 文件中的所有变更,都移植到 B 分支 1.txt 文件中了
希望可以帮到你
在 git 命令中,git rebase命令可以令当前所在分支与指定分支合并,作为一个新提交。但之前的记录保留在原地。他有两种参数形式:
将当前记录及当前记录以上的记录(截止到公共父记录),合并到目的分支
$ git rebase <目的分支>
将一个记录及此纪录以上的记录,合并到目的分支,关键是参数的顺序
$ git rebase <目的分支> <待移动分支>
git rebase -i 命令可以打开一个交互式的窗口,他有下面两种参数形式:
将当前记录及当前记录以上的记录(截止到公共父记录),合并到目的分支
$ git rebase -i <目的分支>
将一个记录及此纪录以上的记录,合并到目的分支,关键是参数的顺序
$ git rebase -i <目的分支> <待移动分支>
此命令可以按指定的顺序择取数个提交,放置在当前节点下方。
$ git cherry-pick <有序参数列表>