参数细节

  • --force:覆盖远程引用以与本地引用匹配。可能会导致远程仓库丢失提交,因此请谨慎使用。
  • --verbose:以详细模式运行。

第29.1节:将特定对象推送到远程分支

通用语法

git push <remotename> <object>:<remotebranchname>

示例

git push origin master:wip-yourname

这会将你的 master 分支推送到 origin 的 wip-yourname 分支(通常是你克隆的仓库)。

删除远程分支

删除远程分支相当于将一个空对象推送到该分支:

git push <remotename> :<remotebranchname>

示例

git push origin :wip-yourname

这会删除 origin 的 wip-yourname 分支。

你也可以使用 --delete 标志,这在某些情况下更易读:

git push origin --delete wip-yourname

推送单个提交

如果你只想推送分支中的单个提交,可以使用以下命令:

git push <remotename> <commit SHA>:<remotebranchname>

示例

假设你的 Git 历史如下:

eeb32bc Commit 1 - 已推送
347d700 Commit 2 - 想要推送
e539af8 Commit 3 - 仅本地
5d339db Commit 4 - 仅本地

要仅推送 347d700 到远程 master,使用以下命令:

git push origin 347d700:master

第29.2节:推送

git push

这会将你的代码推送到现有的上游。根据推送配置,它会推送当前分支的代码(Git 2.x 的默认行为)或所有分支的代码(Git 1.x 的默认行为)。

指定远程仓库

在使用 Git 时,拥有多个远程仓库很有用。要指定要推送的远程仓库,只需在命令后附加其名称:

git push origin

指定分支

要推送特定分支,例如 feature_x:

git push origin feature_x

设置远程跟踪分支

如果你正在工作的分支最初不是来自远程仓库,仅使用 git push 第一次可能无法正常工作。你需要执行以下命令来告诉 Git 将当前分支推送到特定的远程/分支组合:

git push --set-upstream origin master

这里,master 是远程 origin 上的分支名称。你也可以使用 -u 作为 --set-upstream 的简写。

推送到新仓库

要推送到尚未创建或为空的仓库:

  1. 在 GitHub 上创建仓库(如果适用)。

  2. 复制给定的 URL,格式如下:

    https://github.com/USERNAME/REPO_NAME.git

  3. 在本地仓库中,执行以下命令:

    bash git remote add origin URL

    通过运行以下命令验证是否已添加:

    bash git remote -v

  4. 运行以下命令:

    bash git push origin master

    你的代码现在应该已经推送到 GitHub 了。

解释:推送代码意味着 Git 会分析你的本地提交与远程之间的差异,并将这些差异发送到上游以写入。推送成功后,你的本地仓库和远程仓库将同步,其他用户可以看到你的提交。

有关“上游”和“下游”概念的更多详细信息,请查看“备注”。

第29.3节:强制推送

有时,当你的本地更改与远程更改不兼容(例如,无法快速向前推进远程分支,或者远程分支不是你本地分支的直接祖先)时,唯一可以推送更改的方式是强制推送:

git push -f

或者

git push --force

重要说明:这会覆盖任何远程更改,使远程与本地匹配。

注意:使用此命令可能会导致远程仓库丢失提交。此外,如果你与其他人在共享这个远程仓库,强烈建议不要进行强制推送,因为他们的历史会保留每个被覆盖的提交,从而使他们的工作与远程仓库脱节。

一般规则:只在以下情况下进行强制推送:

  • 除了你之外,没有人拉取你试图覆盖的更改。
  • 你可以强制所有人克隆一个全新的副本,并让他们将更改应用到这个新副本上(人们可能会因此讨厌你)。

第29.4节:推送标签

git push --tags

推送本地仓库中尚未存在于远程仓库的所有 Git 标签。

第29.5节:更改默认推送行为

  • current:更新与当前工作分支同名的远程仓库分支。

    bash git config push.default current

  • simple:简单地推送上游分支,但如果上游分支的名称不同,则无法工作。

    bash git config push.default simple

  • upstream:无论远程分支的名称如何,都推送上游分支。

    bash git config push.default upstream

  • matching:推送本地和远程 Git 中匹配的所有分支。

    bash git config push.default matching

设置首选风格后,使用以下命令更新远程仓库:

git push