繁体   English   中英

本地合并推送后,分支中的提交记录在主分支中

[英]Commits in branch are recorded in master branch after local merge and push

这是我的问题:

  1. 我有一个 Github 存储库,我已经在本地clone了它,所以有一个本地master分支跟踪origin/master

  2. 我创建了一个新的本地分支foobar ,并使用命令git push origin foobar其发布到远程 Github 存储库。 此时,在 Github 上,我可以看到masterfoobar分支。 当我将foobar中的后续本地提交推送到远程时,可以在 Github 的foobar分支下看到这些提交。

  3. 在本地,我git checkout master移动到master分支并运行git merge foobar将我的更改合并到master

  4. 我运行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM