【问题标题】:git fetch doesn't update my local repositorygit fetch 不更新我的本地存储库
【发布时间】:2012-04-08 03:28:36
【问题描述】:

我想要什么:

在所有分支中使用我的本地存储库更新来自服务器的所有新闻提交,但不要合并任何分支(只需加入历史行)。

我正在尝试这个命令

git fetch --force --progress --verbose  name@host:/path/to/repository.git 

我认为它会正常工作,因为它显示:

From host:/path/to/repository
  * branch            HEAD       -> FETCH_HEAD

但是,这个输出是什么意思?如果我看到日志,它没有更新。如果我从服务器克隆,所有新的提交都在那里。所以...命令不起作用。然后我尝试使用存在于服务器中但不在我的本地存储库中的分支

git fetch --force --progress --verbose  name@host:/path/to/repository.git my_branch

结果是:

From host:/path/to/repository
  * branch            my_branch       -> FETCH_HEAD

任何成功...即使我不知道所有分支并且我的分支已更新,我想获取这些更改并可以在我的日志中查看。

有什么办法让它工作吗?

【问题讨论】:

  • 你能解释一下加入历史线对你来说意味着什么吗?
  • 我可以说:在历史中进行合并...但不是从 2 个分支。换句话说,我只想更新所有的历史,只有这个。
  • 你想要的叫做快进合并。它只适用于历史没有分歧的情况。如果是这种情况,git pull master(相当于git fetch + git merge origin/master)将在历史没有分歧的情况下自动执行此操作。
  • @CharlesB 你是对的。我想要的是git pull --no-commit。现在我不明白 git fetch 的原因。它只是从服务器下载,所以我可以在离线模式下执行其他任务?

标签: git git-fetch


【解决方案1】:

当您获取远程分支时,您仍然需要将远程分支中的更改合并到本地分支中才能看到这些更改。

获取后,试试这个:

git log origin/yourbranchname | head
git log yourbranchname | head

你看出区别了吗?

现在做:

git checkout origin/yourbranchname -b newbranchname
git log newbranchname

您应该会在新分支名称中看到远程更改。

您还可以将这些更改合并到您的分支中

git checkout yourbranchname
git merge origin/yourbranchname

【讨论】:

  • 好的,git fetch 不更新历史记录,而是更新“数据”,所以我可以设置离线并进行合并。这就是 fetch 的作用?
  • Fetch 下载 remote 分支,但不会更新 local 分支。当您将远程分支合并 到本地分支时,您会更新本地分支。您可以在本地和远程分支上看到“历史记录”。试试gitk yourbranchnamegitk origin/yourbranchname
  • 我做到了。但我只看到该分支的本地更改。我可能做错了什么,但现在我明白了 stash 的作用。我想要做的只是git pull --no-commit 这就是我认为 fetch 要做的 :)
【解决方案2】:

我之前遇到过这个问题,主要原因是你没有在你的git本地配置中配置remote.origin.fetch。

使用以下命令解决您的问题:

git config --local --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*

之后,运行“git fetch origin”,我想你会得到预期的输出。

【讨论】:

  • OP 问题的真正原因是,正如您所说 - 当前本地分支没有远程分支!
  • 这对我有用——帮助度过了一个令人沮丧的早晨!
  • 它解决了我的问题,但我想知道为什么我需要在全新的 git 安装中设置它?我做了“git clone repo_url --depth 1”和“git fetch --unshallow”
【解决方案3】:

git fetch 只是将更改带到远程分支的本地副本。如果您想更新您的 repo 或本地分支,您必须使用 merge 跟随 fetch,否则只需使用 git pull 一次性完成。

很好的答案:https://stackoverflow.com/a/292359/102371

【讨论】:

  • 但是,这个合并意味着另一个提交,所以它可能会因为冲突而失败。我会做一个提取,做一些检查而不是合并。当你说:git fetch just brings the changes to the local copy of the remote branch这正是我想做的,但它不起作用
猜你喜欢
  • 1970-01-01
  • 2014-09-06
  • 2013-02-28
  • 2014-08-22
  • 2018-11-10
  • 2023-03-20
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
相关资源
最近更新 更多