git - 为什么 Git merge 会在 master 分支上创建多个提交?

标签 git version-control merge git-commit

我正在使用两个分支,masternewFeature .在构建“新功能”时,我向 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/

相关文章:

java - 未显示货架选项卡时如何恢复 Intellij 中搁置的更改?

pandas - 如何合并 DataFrame,以便将与*日期*对应的一个数据框的值应用于另一个 DataFrame 的所有日期的所有*时间*?

git - 如何在 git 中保存未完全 merge 的索引?

ms-access - 连接 Access 表中的两列

git - 项目已被删除/替换

git - 如何在移动的文件中 merge Git中的更改?

git - 错误 : Permission to user1/repo. git 拒绝用户 2

version-control - 版本控制 javadoc 的优缺点

git - TortoiseGit 1.8 不要求凭据

svn - 是否可以在 SVN 中查看一行的历史记录?