Git 如何将所有提交从一个分支合并到另一个分支?
我想将分支A合并到主节点,但当我在主节点上使用“git merge A”时,它会合并分支,但只会在主节点上记录一次提交,就像我在分支A上提交了20次一样。我想合并从A到主节点的所有提交。我该怎么做呢?听起来你要找的是重新调整到master 尝试:Git 如何将所有提交从一个分支合并到另一个分支?,git,github,git-branch,git-merge,branching-and-merging,
github,Git,Github,Git Branch,Git Merge,Branching And Merging,
github,我想将分支A合并到主节点,但当我在主节点上使用“git merge A”时,它会合并分支,但只会在主节点上记录一次提交,就像我在分支A上提交了20次一样。我想合并从A到主节点的所有提交。我该怎么做呢?听起来你要找的是重新调整到master 尝试: 我建议您在此处阅读合并和重定基址之间的区别您已将其交叉标记为和,对于这两种不同的情况,答案是不同的 GitHub提供了一个标记为“合并请求”的按钮,带有一个下拉三角形。单击三角形可提供更多选项(至少在正常情况下-表示这“取决于为存储库启用的合并选项”)
我建议您在此处阅读合并和重定基址之间的区别您已将其交叉标记为和,对于这两种不同的情况,答案是不同的 GitHub提供了一个标记为“合并请求”的按钮,带有一个下拉三角形。单击三角形可提供更多选项(至少在正常情况下-表示这“取决于为存储库启用的合并选项”):
- 创建合并提交
- 挤压和合并
- 重设基础和合并
获取依赖于情况的默认操作李>git merge
防止合并,但允许快进操作李>git merge--ff only
强制执行挤压操作,而不创建合并李>git merge--squash
强制执行合并操作;或git merge——无ff
然后是git-rebase
以复制提交,从而使快速转发成为可能这是默认的rebase操作,然后执行快速转发操作git-merge--ff-only
git merge--no ff
(区别在于,如果存在合并冲突,GitHub根本不提供此选项,但也提供此选项)。三个GitHub操作中的第二个相当于命令行git merge--squash
,这就是您在问题中描述的:
。。。只会在master上记录一次提交,就像我在分支A上提交了20次一样
请注意,新提交与其他N个提交具有相同的效果,但它是一个普通的、非合并的单亲提交(这在GitHub接口中很难看到,因为它试图隐藏Git提交图的非线性本质)。看见(请注意,该页面上的普通合并图相当糟糕,但压缩图相当不错。)在命令行上使用--no ff
进行的真正合并有两个父级:第一个父级是执行合并的分支上的上一个提交(即master
),第二个父级是合并的分支的提示提交(在您的示例中,分支A
)。这意味着所有N个单独的提交都保持独立:只添加了一个新的提交,表示组合这些单独提交的结果
在许多方面,这是最好的结果:它允许您将功能添加作为单个单元(合并提交)或一系列更改(分支上的N个单独提交)来查看。但这确实会导致更复杂的历史:如果存在合并的事实预计在将来是无用的或分散注意力的,而N个单独的提交预计是有用的(例如,对于调试),那么最好使用快进操作
正如我上面提到的,快进根本不是合并。但是,只有当所有要合并的“新”提交都“在”所有当前提交之前时,快进才有可能。就我所知,在GitHub上,想象这是否是事实是不可能的
如果可以快进,默认情况下,命令行命令git merge
将执行该操作。如果可能,git merge--ff only
将成功。因此,如果您想尝试快进,但不可能创建实际的合并提交,那么只需使用git merge--ff only
,观察它是否成功
如果当前无法实现快进,可以使用git-rebase
使其成为可能,然后可以使用git-merge
(可选使用--ff-only
,作为安全检查,或者覆盖使用git-config-merge.ff
设置的任何配置)。重定基址有点复杂,至少当它出错时是这样,所以正如其他人所说的,你应该先读一遍
1或至少,太难了,不值得麻烦。如果有一个clicky按钮显示实际的提交图,那可能会很有趣
git checkout A
git rebase master