【问题标题】:git fetch shows nothing on consolegit fetch 在控制台上什么也不显示
【发布时间】:2013-06-29 10:02:15
【问题描述】:

我们遵循这种使用 git 的模型: http://nvie.com/posts/a-successful-git-branching-model/

我正在尝试学习在特定合并上使用 git fetch 和 git merge 而不是仅仅拉取。对于我的问题,我所做的是对分支进行更改并将这些更改推送到分支。我在 github 上看到了这些变化。然后我切换到 master 以获取这些更改。所以我

git checkout master
git fetch  // terminal shows nothing
git fetch origin  // terminal shows nothing

我是否正确使用命令进行获取?我在控制台上看不到任何东西。但是,当我使用 SourceTree 之类的工具并进行获取时,它会更新它们的树,并且我可以看到更改。

假设我开始执行下一步,并且我看到进行了不同的更改,我是否只需执行git merge <hash of the last commit or commit I want to merge in>?谢谢!

【问题讨论】:

  • 如果一切都是最新的,那么git fetch 将不会输出任何内容。
  • @dyng 我不认为 master 是最新的,因为当我构建时,我没有我在最后一个分支上拥有的最新功能。这有意义吗?
  • 默认情况下,如果你为master设置了一个upstream,git fetch origin会获取到origin/master(not master)的代码,我的意思是@当我说最新时,987654329@ 是最新的。您可以通过git diff master origin/master查看。如果没有,可能你没有设置上游。
  • 获取是从 repo 存储库更新内部引用和对象(在 .git 内),但要查看最新功能,您必须合并它们。如果您已经在本地 master 分支中,则可以这样做:git merge origin/master(这将合并本地“master”分支中远程“origin/master”隐含的所有修改)

标签: git


【解决方案1】:

关于最后一部分,如“Fun with FETCH_HEAD”中提到的,你可以这样做:

$ git fetch git://repo.or.cz/stranger.git for-junio
$ git log -p ..FETCH_HEAD
$ git merge FETCH_HEAD

因为“pull”是“fetch + merge”,我们明确地将操作分解为两个步骤。

"fetch" 将它在另一侧找到的分支上的信息留在 FETCH_HEAD 中,您可以使用它来命名位于分支顶端的提交对象。
git log -p ..FETCH_HEAD”(注意双点)让您可以查看他的提交但不在您的分支中,并以补丁形式更改它们以检查他所做的事情是明智的。
如果您满意,您可以使用FETCH_HEAD 将提交合并到您的分支中

(例如参见this answer

如“How Do I 'git fetch' and 'git merge' from a Remote Tracking Branch (like 'git pull')”中所述,如果您定义了 upstream branch,则不必使用 FETCH_HEAD:

git fetch origin
git merge origin/an-other-branch

git fetch origin an-other-branch 将获取的小费存储在 FETCH_HEAD 中,但不存储在 origin/an-other-branch 中(即通常的“远程跟踪分支”)。
所以,可以git fetch origin an-other-branch && git merge FETCH_HEAD

对于第一部分,确保 your branch has an upstream branch set 到您的远程上游仓库。

【讨论】:

    【解决方案2】:

    git fetchgit fetch origin 都可以,但是如果什么都不做,什么都不显示。

    您可以使用git fetch -v 更详细并显示更多信息

    【讨论】:

    • 直截了当的回答。
    【解决方案3】:

    我发现这个是因为我遇到了类似的问题。我不知道为什么,但就我而言,我需要明确命名已更新的分支:

    $ git fetch [origin] [branch]
    

    让我解释一下——我将 git 用于小脚本。我以master 开始回购。脚本部署到生产环境后,我还想继续工作,我会创建一个dev 分支。但是大多数项目只有一个分支,或者我只是在合并后不保留dev

    今天,我对远程主机进行了一些小的更改,并希望使用这些更改更新我的本地系统。出于习惯,我只是做了$ git fetch。没啥事儿。然后我找到了你的帖子。首先,我添加了项目名称(来源)并做了$ git fetch [origin]。这将 dev 和 master 更新为他们在 1 月份共享合并的最后一次。那么,哦!我运行了$ git fetch [origin] master,现在已经下载了更改。

    【讨论】:

      猜你喜欢
      • 2016-12-24
      • 2021-10-01
      • 2018-11-02
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 2015-09-19
      相关资源
      最近更新 更多