关于 git push
git push 命令接受两个参数
- 远程名称,例如
origin - 分支名称,例如
main
例如
git push REMOTE-NAME BRANCH-NAME
例如,你通常运行 git push origin main 将本地更改推送到线上仓库。
重命名分支
要重命名分支,你可以使用相同的 git push 命令,但需要再添加一个参数:新分支的名称。例如
git push REMOTE-NAME LOCAL-BRANCH-NAME:REMOTE-BRANCH-NAME
这会将 LOCAL-BRANCH-NAME 推送到你的 REMOTE-NAME,但在远程被重命名为 REMOTE-BRANCH-NAME。
处理 “non-fast-forward” 错误
如果你本地的仓库副本与要推送的上游仓库不同步或“落后”,你会收到一条消息,提示 non-fast-forward updates were rejected。这意味着你必须先检索(fetch)上游的更改,才能推送本地的更改。
有关此错误的更多信息,请参阅 处理 non-fast-forward 错误。
解决被阻止的提交
为维护你要推送的仓库安全,GitHub 的推送保护会自动防止你不小心将机密提交到 GitHub.com 上的公共仓库。泄露的机密会对仓库及供应链造成严重安全风险。如果 GitHub 检测到你尝试推送的提交包含受支持的机密,它会阻止此次推送。为了解除阻止,你应当:
欲了解更多关于推送保护的信息,请参阅 为用户管理推送保护。
推送标签
默认情况下且不添加额外参数时,git push 会发送所有与远程分支同名的匹配分支。
要推送单个标签,你可以使用与推送分支相同的命令
git push REMOTE-NAME TAG-NAME
要推送所有标签,你可以键入以下命令
git push REMOTE-NAME --tags
删除远程分支或标签
删除分支的语法乍看之下有点晦涩
git push REMOTE-NAME :BRANCH-NAME
请注意,冒号前有一个空格。此命令与重命名分支的步骤相似。但这里你告诉 Git 向 REMOTE-NAME 上的 BRANCH-NAME 推送 无内容,因此 git push 会删除远程仓库中的该分支。
远程仓库和分叉
你可能已经知道,你可以在 GitHub 上“fork”仓库。
当你克隆自己拥有的仓库时,需要提供一个远程 URL,告诉 Git 从哪里获取和推送更新。如果想与原始仓库协作,你可以在本地 Git 克隆中添加一个新远程 URL,通常称为 upstream。
git remote add upstream THEIR_REMOTE_URL
现在,你可以从他们的分叉获取更新和分支
git fetch upstream
# Grab the upstream remote's branches
> remote: Counting objects: 75, done.
> remote: Compressing objects: 100% (53/53), done.
> remote: Total 62 (delta 27), reused 44 (delta 9)
> Unpacking objects: 100% (62/62), done.
> From https://github.com/OCTOCAT/REPO
> * [new branch] main -> upstream/main
完成本地更改后,你可以将本地分支推送到 GitHub 并 发起拉取请求。
有关使用分叉的更多信息,请参阅 同步分叉。