Git 使用 URL 时获取不提取更改

Git fetch not pulling changes when using URL

我正在尝试设置一项服务,该服务将在检测到远程分支上的更改时自动更新我的存储库。在有人提到它之前,我知道将密码嵌入 URL 是不好的做法。我目前正在使用:

git fetch https://<user>:<pass>@github.com/<org>/<repo>

输出为:

From https://github.com/<org>/<repo>
 * branch            development -> FETCH_HEAD

当我 运行 git status 完成提取后,它没有检测到最新的更改。

如果我 运行 没有 URL 的普通 git fetch 并手动提供用户名和密码,我会得到不同的输出:

From https://github.com/<org>/<repo>
   96353f7..e88782c  development -> origin/development

然后 运行ning git status 按预期工作并检测到远程分支上有更改。

我对 Git 不是很有经验,我觉得我遗漏了一些非常明显的东西。我的错误在哪里?

编辑

所以看起来缺少的部分是让我在 URL:

之后指定本地和远程分支
git fetch https://<user>:<pass>@github.com/<org>/<repo> development:origin/development

正如接受的答案所指出的那样:如果您不指定远程名称,git 会将远程更改置于默认值 FETCH_HEAD 中。这可以通过明确指定本地和远程分支来解决。

我仍然有点困惑为什么 git fetch 默认情况下知道从 origin 远程抓取,但指定 URL 会更改此默认设置。但无论如何它现在都在工作

Git 遥控器是与 URL 关联的名称。默认名称是 origin,URL 通常是您从中克隆的名称。

Git 将远程存储库的快照存储在 "remote tracking branches" 中。这些是 <remote-name>/<branch> 的形式。当您 git fetch origin Git 从与 origin 关联的 URL 获取更改并将它们放入远程分支时。 development -> origin/development 告诉你它把远程的开发分支放到了你的 origin/development 远程分支中。

当您 运行 git fetch https://<user>:<pass>@github.com/<org>/<repo> 并只给它 URL 时,没有远程名称,Git 没有远程跟踪分支的名称。所以它只是将它们粘在一个短暂的 FETCH_HEAD 中,它记录了你的最后一个 git fetch。这就是 development -> FETCH_HEAD 告诉你的。


无论如何,git status 都不会显示任何变化。 git fetch 永远不会更改您的本地分支机构、索引或结帐。它将 更新您的远程跟踪分支。这使得习惯性地 运行 git fetch 更新远程存储库的快照变得安全。

您正在寻找更新远程分支的本地副本的是git pull


最后,为了避免每次都必须输入您的用户名和密码,或者更糟糕的是将它们硬编码到 URL、set up a Git credential helper to securely store your username and password.