【问题标题】:Git pull not pulling everythingGit pull 没有拉动一切
【发布时间】:2012-03-13 17:19:54
【问题描述】:

我有一个服务器,其中有一些我不知道的配置,我只是 git pull 并获取 github 存储库中的内容,然后重新启动它以进行部署。

问题是,有一个不是我最新的提交,它不在我的服务器上。这些文件不在 .gitignore 中。我如何保证一个拉,拉一个提交?

我真的不知道如何解决它,我正在考虑重新启动一切:(

14:41][root@someserver] someserver_dir (master)$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   Gemfile
#   modified:   Gemfile.lock
#   modified:   config/assets.yml
#   modified:   config/database.yml
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   randomfiles

【问题讨论】:

  • 更多信息将使您更容易回答您的问题。 git status 向您展示了什么?你在当地的正确分支吗?例如,如果您正在查看服务器上的master 分支,您是否在本地签出了mastergit log origin/master..master 怎么样?
  • git 仓库是公开的吗?如果有,请提供 URL。
  • 不公开,git status 告诉我一切都很好,只有一个分支。
  • 我已经尝试再次提交更改,神奇的是,当我拉动时,什么也没发生(已经是最新的)。
  • 包含git status的输出。

标签: git


【解决方案1】:

如果您总是希望您的服务器版本反映来自您的存储库的提交,最好使用 git reset 而不是 git pull - 这样您就永远不会调用合并功能,而是将所有文件设置为确切的内容它们在您重置的提交中。例如:

git fetch origin master
git reset --hard FETCH_HEAD

【讨论】:

  • 我总是忘记这个命令,所以我一直回到这个线程。如果您想从特定分支获取所有内容,只是想将“master”更改为任何其他分支名称也可以。
  • 你也可以重置到一个特定的分支,所以 git reset --hard origin/master 也可以,就像你指定的任何分支一样。 (看到自己在 5 年前问这个问题很有趣,我记得我正在管理一些使用 git 进行部署的远程服务器并最终处于糟糕的状态......哈哈)
  • 在此文件恢复为原始文件后,但我得到了这个“致命:无法将索引文件重置为修订版 'FETCH_HEAD'。”我有什么需要做的吗?
  • 拯救了我的一天!!!已经为此苦苦挣扎了很长一段时间,无法弄清楚为什么我没有从 origin master 提取全新分支中的最新更改。
  • 太棒了。我试过git fetch origin &lt;branchname&gt;,然后是git reset --hard FETCH_HEAD。这个分支在 github.com 上可见,但在我的本地不可见,即使在多次尝试 git pull 之后也是如此。
【解决方案2】:

您可以使用git pull origin branch_name of the github

例如:如果我在 GitHub 上有一个生产分支,那么我会写 git pull origin production,它将给我所有最新的提交。

即使您正在处理该分支并提交它,有时仅执行 git pull 并不会为您提供生产分支的最新提交。

幕后工作

http://git-scm.com/docs/git-pull#_default_behaviour

Explanation and Examples

【讨论】:

  • 这对我有用。最好能更好地解释原因。
  • 我添加了文档以及指向其他人答案的链接,以便更好地理解。 @VendettaV - 感谢您指出这一点
  • 谢谢!有人投票否决了您毫无根据的答案。我投了赞成票。
【解决方案3】:

尝试清理本地存储库,然后运行 ​​git pull:

$ git gc --prune=now
$ git remote prune origin

【讨论】:

    猜你喜欢
    • 2017-10-06
    • 2014-08-15
    • 2015-01-23
    • 2011-10-15
    • 2016-02-08
    • 2021-04-26
    • 1970-01-01
    • 2020-03-14
    • 2020-03-25
    相关资源
    最近更新 更多