Git push 不会做任何事情(一切都是最新的)

标签 git dvcs

我正在尝试更新 GitHub 上的 Git 存储库。我做了一堆更改,添加它们,提交然后尝试执行 git push。响应告诉我一切都是最新的,但显然不是。

git remote show origin

响应我期望的存储库。

为什么当存储库中有不可见的本地提交时 Git 告诉我存储库是最新的?

  [searchgraph]  git status
# On branch develop
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Capfile
#       config/deploy.rb
nothing added to commit but untracked files present (use "git add" to track)

  [searchgraph]  git add .

  [searchgraph]  git status
# On branch develop
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   Capfile
#       new file:   config/deploy.rb
#

  [searchgraph]  git commit -m "Added Capistrano deployment"
[develop 12e8af7] Added Capistrano deployment
 2 files changed, 26 insertions(+), 0 deletions(-)
 create mode 100644 Capfile
 create mode 100644 config/deploy.rb

  [searchgraph]  git push
Everything up-to-date

  [searchgraph]  git status
# On branch develop
nothing to commit (working directory clean)

最佳答案

git push 不会推送您所有的本地分支:它如何知道将它们推送到哪些远程分支?它只推送已配置为推送到特定远程分支的本地分支。

在我的 Git 版本 (1.6.5.3) 上,当我运行 git remote show origin 时,它实际上会打印出哪些分支是为推送配置的:

Local refs configured for 'git push':
  master pushes to master (up to date)
  quux   pushes to quux   (fast forwardable)

问。但我可以推送到 master 而不必担心这一切!

当您 git clone 时,默认情况下它会设置您本地的 master 分支以推送到远程的 master 分支(本地称为origin/master),因此如果您只在 master 上提交,那么一个简单的 git push 将始终推送您的更改。

但是,从您发布的输出片段来看,您位于一个名为 develop 的分支上,我猜该分支尚未设置为推送任何内容。因此,不带参数的 git push 不会推送该分支上的提交。

当它说“Everything up-to-date”时,意思是“你告诉我如何推送的所有分支都是最新的”。

问。那么我该如何推送我的提交呢?

如果你想做的是将你的更改从 develop 放入 origin/master,那么你应该将它们 merge 到你的本地 master 然后推送:

git checkout master
git merge develop
git push             # will push 'master'

如果你想要在远程创建一个 develop 分支,与 master 分开,然后向 git push 提供参数:

git push origin develop

这将:在远程创建一个名为 develop 的新分支; 使该分支与您本地的 develop 分支保持同步; 设置 develop 推送到 origin/develop 以便将来 git push 不带参数 自动推送 develop

如果你想将你的本地 develop 推送到一个名为不同于 develop 的远程分支,那么你可以说:

git push origin develop:something-else

但是,该表单不会设置develop 以在将来始终推送到origin/something-else;这是一次性操作。

关于Git push 不会做任何事情(一切都是最新的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936652/

相关文章:

git - 将子模块包含到主存储库中

带有 https 错误的 git 克隆 - 致命 : repository not found

仅对一个文件的 Git pull 请求

git - 分布式 VCS 中的不同访问权限

mercurial - 为什么 Mercurial merge 时很笨?如何使拉取/merge 更改变得更简单?

git - 保护文件免受 git merge 中的修改

git - 如何在不 fork 的情况下复制 gitlab/github 上的 git 存储库?

dvcs - 化石单片机 : Merge leafs back to trunk

architecture - 分布式修订控制系统的分散行为如何工作?

Mercurial:在 "hg pull -u"之前强制执行 "hg commit"