【问题标题】:Git commit listGit 提交列表
【发布时间】:2012-07-02 07:06:06
【问题描述】:

我想我只是在 git 中遗漏了一些重要的点。 我将 PhpStorm IDE 用于开发过程,并将 GIT 用作 VCS。 每次我从一个开发人员分支中提取更改时,我都会得到其他开发人员的提交列表,这是完全正常的。但是当我推送更改时,我不仅推送本地提交的提交,还推送通过拉取检索的提交。

但是为什么会这样呢?为什么其他开发人员提交在我的推送中?我认为只要 GIT 将这些开发人员的提交存储在远程分支上,它们就已经被推送了。我错过了什么吗?

GIT 命令(根据 IDE 历史记录):

git pull --no-stat -v --progress origin trunk

git push origin trunk:trunk

GIT 版本:1.7.4.4,操作系统:Mac OS X 10.7

【问题讨论】:

  • 你在使用rebase吗?您注意到其他开发人员的更改也被推送到什么程度?是同一个远程服务器吗?
  • 你使用的是哪个版本的git(版本号和平台)?另外,您究竟使用的是什么形式的 git pushgit pull 命令?
  • @JonasWielicki 不,没有变基。我相信一个月左右。在此之前,我们使用的是 SVN。是的,服务器是一样的。
  • @MarkLongair 用命令和 git 版本更新了问题
  • 你怎么知道其他开发者的提交是“在你的推送中”?

标签: git intellij-idea commit phpstorm


【解决方案1】:

正如 Vonc 所说,当你运行 git pull origin trunk 时,git 首先运行一个 fetch (git fetch origin trunk),它从远程“原点”获取分支“主干”,并将其存储在 FETCH_HEAD 中。

请注意,这可能是意外行为,并且是使用git-pullgit-fetch 的“4 参数”形式的一个很好的理由。

无论如何,运行 fetch 后,git 运行 git merge FETCH_HEAD。这将获取新获取的远程分支,并将其合并到本地分支中。您刚刚将本地分支和来自 'origin' 的 'trunk' 分支合并在一起。

如果您无法将其可视化,请尝试运行 gitkgit log --graph --oneline --decorate 以图形方式查看历史记录。您应该能够看到两条历史记录(您的和远程的)被合并在一起。 git log,没有--graph--first-parent 等,将显示从当前分支可到达的所有提交,但不会区分它们实际位于哪个分支。

不出所料,当您运行 git push 时,git 会获取此合并的历史记录并将其推送。

您可能打算运行git fetchgit fetch origin 而不是git pull origin trunk。这将从“origin”获取更新的分支,并将它们存储在您的远程跟踪分支中(例如“origin/trunk”)。然后你可以用例如检查这个git log origin/trunk。如果您想将“origin/trunk”合并到本地分支,请使用git merge origin/trunk

【讨论】:

    【解决方案2】:

    如果您真的要拉动更改 (git pull),您可以在当前分支中获取并合并它们。

    如果您在推送时看到所有其他开发人员提交,那可能是因为您的拉取配置为先进行变基 (git pull --rebase)。
    检查配置设置branch.autosetuprebasebranch.<name>.rebase

    【讨论】:

    • 已检查 - 未设置 rebase 或 autosetuprebase
    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 2017-04-14
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多