[英]Commits in branch are recorded in master branch after local merge and push
这是我的问题:
我有一个 Github 存储库,我已经在本地clone
了它,所以有一个本地master
分支跟踪origin/master
。
我创建了一个新的本地分支foobar
,并使用命令git push origin foobar
其发布到远程 Github 存储库。 此时,在 Github 上,我可以看到master
和foobar
分支。 当我将foobar
中的后续本地提交推送到远程时,可以在 Github 的foobar
分支下看到这些提交。
在本地,我git checkout master
移动到master
分支并运行git merge foobar
将我的更改合并到master
。
我运行git push
将更改推送到 Github。
问题是在 Github 上,我在foobar
分支(在步骤 2 中)所做的提交被记录为master
分支中的提交:这可以通过查看我的 Github 存储库的 Insights 选项卡中的网络图来看到:我在foobar
在代表master
的线上显示为点。 换句话说,就 Github 而言,本地合并似乎将所有提交都放入master
分支,但这不是我想要的存储库的“历史”!
但是,如果我重复上述步骤直到第 3 步,然后我在Github 中创建一个合并拉取请求以将foobar
合并到master
中,则foobar
中的提交将显示在该分支中。 我可以通过查看 Github 存储库的 Insights 选项卡中的网络图来确认这一点(即我在foobar
中的提交显示为foobar
行中的点而不是master
行)。
有没有办法运行我的本地 git 命令,这样我就不需要在 Github 网站上合并?
您所做的称为快进合并。 换句话说,当您要合并的分支 ( foobar
) 是您要合并的分支 ( master
) 的超集时,默认情况下 Git 只会将两个分支更新为相同。
在 GitHub 上执行合并时,GitHub 默认总是执行非快进合并; 也就是说,它总是创建一个合并提交。 这对于跟踪更改很有用,如果这是您在本地想要的行为,您可以使用--no-ff
选项: git merge --no-ff foobar
。
这主要是您想要什么的风格和偏好问题。 一些项目更喜欢没有合并提交的线性历史记录,而一些项目更喜欢使用合并提交显式跟踪单个功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.