分支中的提交在本地合并和推送后记录在主分支中
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
。
I 运行 git push
将更改推送到 Github.
问题是在 Github 上,我在 foobar
分支中(在步骤 2 中)所做的提交被记录为 master
分支中的提交!这可以通过查看我的 Github 存储库的 Insights 选项卡中的网络图看到:我在 foobar
中所做的提交显示为代表 master
的线上的点。换句话说,就 Github 而言,本地合并似乎将所有提交放入 master
分支,但这不是我想要的存储库 "history"!
但是,如果我重复上述步骤直到第 3 步,然后我创建一个合并拉取请求 within Github 将 foobar
合并到 master
,foobar
中的提交将出现在该分支中。我可以通过查看 Github 存储库的 Insights 选项卡中的网络图来确认这一点(即我在 foobar
中的提交在 foobar
行而不是 master
行中显示为点).
有没有办法 运行 我的本地 git 命令,这样我就不需要在 Github 网站上合并?
您所做的称为快进合并。换句话说,当您要合并的分支 (foobar
) 是您要合并到的分支 (master
) 的超集时,默认情况下 Git 只是将两个分支更新为一样。
当您在 GitHub 上执行合并时,GitHub 默认总是执行非快进合并;也就是说,它总是创建一个合并提交。这对于跟踪更改很有用,如果这是您想要的本地行为,您可以使用 --no-ff
选项:git merge --no-ff foobar
.
这主要是关于您想要什么的风格和偏好问题。有些项目更喜欢没有合并提交的线性历史,有些更喜欢通过合并提交明确跟踪单个功能。
这是我的问题:
我有一个 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
。I 运行
git push
将更改推送到 Github.
问题是在 Github 上,我在 foobar
分支中(在步骤 2 中)所做的提交被记录为 master
分支中的提交!这可以通过查看我的 Github 存储库的 Insights 选项卡中的网络图看到:我在 foobar
中所做的提交显示为代表 master
的线上的点。换句话说,就 Github 而言,本地合并似乎将所有提交放入 master
分支,但这不是我想要的存储库 "history"!
但是,如果我重复上述步骤直到第 3 步,然后我创建一个合并拉取请求 within Github 将 foobar
合并到 master
,foobar
中的提交将出现在该分支中。我可以通过查看 Github 存储库的 Insights 选项卡中的网络图来确认这一点(即我在 foobar
中的提交在 foobar
行而不是 master
行中显示为点).
有没有办法 运行 我的本地 git 命令,这样我就不需要在 Github 网站上合并?
您所做的称为快进合并。换句话说,当您要合并的分支 (foobar
) 是您要合并到的分支 (master
) 的超集时,默认情况下 Git 只是将两个分支更新为一样。
当您在 GitHub 上执行合并时,GitHub 默认总是执行非快进合并;也就是说,它总是创建一个合并提交。这对于跟踪更改很有用,如果这是您想要的本地行为,您可以使用 --no-ff
选项:git merge --no-ff foobar
.
这主要是关于您想要什么的风格和偏好问题。有些项目更喜欢没有合并提交的线性历史,有些更喜欢通过合并提交明确跟踪单个功能。