ili*_*ode 1 git version-control merge git-commit
我正在master
和我合作两个分支机构newFeature
.在构建"新功能"时,我向newFeature
分支添加了多个提交.我的理解git merge
是,一旦合并分支,它将创建一个单一的提交master
,但是当合并时,master
现在具有完整的提交历史记录newFeature
.例如-
master (pre-merge):
1=>2=>3
newVersion:
1=>2=>3=>4=>5=>6
master (actual results of merge):
1=>2=>3=>4=>5=>6
master (expected results of merge):
1=>2=>3=>6
Run Code Online (Sandbox Code Playgroud)
有没有办法newVersion
在合并期间删除中间提交,为什么合并不按预期工作?
这里要注意的关键是,在master
整个工作过程中没有任何变化newVersion
.在这些情况下,Git默认为"快进"合并,基本上可以将其视为从所有新提交中获取newVersion
并将它们附加到最近的提交master
(这不会分离在上面执行的提交历史记录)newVersion
).这可以用--no-ff
标志覆盖,例如:
git merge newVersion --no-ff
Run Code Online (Sandbox Code Playgroud)
结果是:
master (pre-merge):
1=>2=>3
newVersion:
1=>2=>3=>4=>5=>6
master (actual results of merge):
1=>2=>3=========>7
4=>5=>6
Run Code Online (Sandbox Code Playgroud)
请注意,commit 7 表示合并,并不替换提交历史记录.
参考:https://sandofsky.com/images/fast_forward.pdf
或者,如果您希望将整个提交历史合并newVersion
到单个提交中master
(如果它们只是在"新版本"的整个过程中只是次要提交,则可能很有用),您可以使用--squash
标志运行合并.例如:
git merge --squash newVersion
Run Code Online (Sandbox Code Playgroud)
结果是:
master (pre-merge):
1=>2=>3
newVersion:
1=>2=>3=>4=>5=>6
master (actual results of merge):
1=>2=>3=>7
Run Code Online (Sandbox Code Playgroud)
请注意,7合并了在提交4 - 6中完成的提交历史记录
归档时间: |
|
查看次数: |
840 次 |
最近记录: |