我正在使用两个分支,master
和 newFeature
.在构建“新功能”时,我向 newFeature
添加了多个提交。分支。我对git merge
的理解是它将在 master
上创建单个提交一旦分支 merge ,但是 merge 后,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
有什么办法可以从
newVersion
中删除中间提交吗?在 merge 期间,为什么 merge 没有按预期工作?
最佳答案
这里要注意的关键是,对master
没有进行任何更改。您在 newVersion
的整个工作过程中.在这些情况下,Git 默认为“快进” merge ,这基本上可以认为是从 newVersion
获取所有新提交。并将它们附加到 master
上的最新提交中(这不会分离在 newVersion
上完成的提交历史记录)。这可以用 --no-ff
覆盖标志,例如:
git merge newVersion --no-ff
结果是:
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
请注意,commit 7 表示 merge ,并不替换提交历史记录。
引用:https://sandofsky.com/images/fast_forward.pdf
或者,如果您希望 merge
newVersion
的整个提交历史记录在 master
上进行一次提交(如果它们在“新版本”的整个进程中只是次要提交,则可能很有用)您可以使用 --squash
运行 merge 。旗帜。例如:git merge --squash newVersion
结果是:
master (pre-merge):
1=>2=>3
newVersion:
1=>2=>3=>4=>5=>6
master (actual results of merge):
1=>2=>3=>7
请注意,7 merge 了在提交 4 - 6 中完成的提交历史记录
关于git - 为什么 Git merge 会在 master 分支上创建多个提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45177660/