提问人:Max 提问时间:8/9/2023 最后编辑:GuildensternMax 更新时间:8/10/2023 访问量:140
如何正确合并拉取请求并协调本地存储库
How to correctly merge pull request and reconcile local repository
问:
当我在 GitHub 上合并拉取请求然后在本地存储库上运行时,我发现了另一个提交:合并 github.com:repository 的分支“blabla”和“main”,在日志中,写着:由“ort”策略进行的合并。然后我被迫推送此提交。git pull -a
重现步骤:
- 创建存储库并提交
- 创建一个分支并进行一些更改,然后推送
- 在 GitHub 门户上,单击“创建拉取请求”并合并
- 在本地存储库中,在主分支上运行
git pull -a
- 此时将显示新的提交。
- 现在你必须运行
git push
问题在于,在 GitHub 存储库上,有在主分支上完成提交时运行的 Actions 工作流。
在不创建另一个提交的情况下执行拉取请求并协调本地存储库的正确工作流程是什么?
编辑: 我是唯一与存储库交互的人
答:
有几个关于 git 的细节导致了这种行为:
您当地的分支机构是完全独立的分支机构。
main
origin/main
git fetch origin
从存储库下载任何更改(例如,新提交或新分支),但不会将它们与本地分支合并(即本地分支保持不变)。要实际查看文件系统上的更改,您需要检查它们,例如使用 .origin
main
git reset --hard origin/main
git pull origin main
执行 a 后跟 .通常,git 会执行所谓的快进合并,它只会将您的本地内容推进到 ,但如果由于某种原因无法做到这一点,它将创建一个完整的合并提交。git fetch
git merge
main
origin/main
出于这个原因,我总是使用以下工作流程,我建议你做同样的事情:
- 切勿使用,因为它可能会产生意想不到的副作用。
git pull
- 相反,请始终使用后跟(将分支名称替换为您当前正在处理的任何名称)。
git fetch origin
git reset --hard origin/main
或者,您可以使用 GitKraken、Git Extensions 或 SmartGit 等 UI,它们将为您可视化当前情况。
如果你想更深入地挖掘,我强烈推荐这个YouTube视频,它向我解释了这一点。
这里有几个错误:
如果你是唯一使用此存储库的人,则不应使用拉取请求。拉取请求不是 Git 功能;它们是 GitHub 的一项功能,仅用于促进协作。你没有合作,所以拉取请求是没有意义的,只是让你的生活不必要地复杂化。
如果您决定使用拉取请求合并到 ,那么您不应该有本地 .你不需要它做任何事情,因为你永远不会融入其中。如果需要在 的末尾启动一个新分支,或者只是调查 的状态,请执行一个 并查看 ,远程跟踪分支。我已经在其他地方解释了我如何在没有本地.
main
main
main
main
git fetch
origin/main
main
这些建议中的任何一个都不需要这个问题。但是,如果你确实有一个本地人,你仍然应该遵循规则:永远不要说。它的行为是不确定的(至少从用户的角度来看;它的行为方式有原因,但很难找出它们是什么),它不会做任何你不能通过说然后继续合并或变基或其他什么来做得更干净的事情。
main
git pull
git fetch
评论
git pull --ff-only