Git Bash - Git 将分支显示为最新的,而实际上它们不是最新的

Posted

技术标签:

【中文标题】Git Bash - Git 将分支显示为最新的,而实际上它们不是最新的【英文标题】:Git Bash - Git is showing branches as being up to date when they actually aren't 【发布时间】:2022-01-11 09:33:45 【问题描述】:

我有两个本地分支,maindev。当我尝试从 dev 提交更改并将其推送到 main 时,它说一切都是最新的,实际上什么也没发生。此外,我的 github repo 并没有反映我本地 repo 中的最新更改,即使我尝试将它推上去并且它说它是成功的。提交未显示在我的新仓库中。

当我输入“git remote show origin”时,输出如下:

$ git remote show origin
* remote origin
  Fetch URL: <myRepo'sURL>
  Push  URL: <myRepo'sURL>
  HEAD branch: main
  Remote branches:
    dev  tracked
    main tracked
  Local branch configured for 'git pull':
    main merges with remote main
  Local refs configured for 'git push':
    dev  pushes to dev  (fast-forwardable)
    main pushes to main (up to date)

我对 git 很陌生,所以边走边学。有人知道我为什么会遇到这个问题吗?如果需要,我可以运行其他命令来提供更多信息

要推送更改,这是我遵循的过程:

首先,git 状态。输出是这样的:

On branch dev
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   __pycache__/app.cpython-39.pyc
        modified:   app.py

no changes added to commit (use "git add" and/or "git commit -a")

然后,我运行“git add”。此命令没有输出。

接下来,"git commit -m "test"。这是输出:

$ git commit -m "test"
[dev 5af52ce] test
 2 files changed, 4 insertions(+), 8 deletions(-)

最后,“git push origin main”。这是输出:

$ git push origin dev
Enumerating objects: 20, done.
Counting objects: 100% (20/20), done.
Delta compression using up to 16 threads
Compressing objects: 100% (14/14), done.
Writing objects: 100% (16/16), 1.77 KiB | 1.77 MiB/s, done.
Total 16 (delta 10), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (10/10), completed with 3 local objects.
To <myRepo'sURL>
   0f1504d..5af52ce  dev -> dev

谢谢!

【问题讨论】:

我们需要更多细节。 “我尝试提交和推动更改”是什么意思?你做了什么确切的命令?这些命令的结果是什么?您可以使用git statusgit loggit diff 等命令检查每个提交是否包含您期望的更改。使用git help &lt;command&gt; 了解有关如何使用这些命令的更多详细信息。 根据此处显示的输出,命令 git push origin dev 可能会将您在 dev 上的新提交发送到 Git 存储库中尚不存在的新提交到 Git在 GitHub 上的存储库。 (您的 dev 可能与您的 main 相同,而 GitHub dev 就在后面;我们无法从您在此处显示的内容中判断出来。) 感谢您的反馈。我刚刚添加了更多信息。刚才检查了 github 之后,似乎我可以直接从本地 dev 分支推送到 github 上的 dev 分支,完全绕过“主”分支。我猜我的分支层次结构搞砸了,但我不确定如何检查/修复它 “完全绕过主分支”,但这就是 git 的工作方式......也许这只是对 git 实际工作方式的一些困惑?你能详细说明这里的问题是什么吗?我的意思是您可能会看到一些您不同意的状态消息,您能否发布该确切状态消息(或其他观察结果),解释您不同意的原因以及您期望它显示的内容? `到目前为止,您问题中的所有命令和输出似乎都表明没有问题,但显然您有一个问题,因为您提出了问题。 我怀疑这里的部分困惑来自您在 GitHub 上看到的内容。默认情况下,GitHub 会显示main 分支的目录结构。您可以选择dev 分支来查看其内容。您还可以将默认分支设置为您想要的任何分支。 【参考方案1】:

当我尝试将更改从 dev 提交并推送到 main 时,

您正在做的是从dev 推送到origin/dev。 而且由于远程存储库显示默认分支main,因此您不会“看到”任何明显的更改(您需要切换到网页中的 dev 分支才能看到您的提交)。

你可以在本地合并dev到main,然后push main:

git switch main
git merge dev
git push

【讨论】:

这就是我想要做的,我只是混淆了命令/术语,而“合并”正是我所需要的。谢谢!

以上是关于Git Bash - Git 将分支显示为最新的,而实际上它们不是最新的的主要内容,如果未能解决你的问题,请参考以下文章

如何让 git bash 在子模块中显示分支名称

如何用命令将git bash更新到最新版本

mac bash上显示git分支与状态

Git hook prepare-commit-msg 以防止合并禁止的分支 - 将 Ruby 转换为 Bash

text git将master分支重置为最新

在 Linux 上显示当前分支和着色(如 Windows 上的 Git Bash)