当你对仓库中的文件进行更改时,Git 会根据检出的分支的最新版本跟踪这些更改。你可以使用 Git 命令审查并提交更改到分支,然后将你的工作推送到极狐GitLab。
添加并提交本地更改
当你准备好将更改写入分支时,可以提交这些更改。一个提交包含记录有关更改信息的注释,通常会成为分支的新顶点。
Git 不会自动将你移动、修改或删除的任何文件包含在提交中。这可以防止你不小心包含某个更改或文件,比如临时目录。要在提交中包含更改,可以使用 git add
对其进行暂存。
要暂存并提交你的更改:
-
在你的仓库中,对于每个你想添加的文件或目录,运行
git add <file name or path>
。要暂存当前工作目录中的所有文件,运行
git add .
。 -
确认文件已被添加到暂存区:
git status
文件将以绿色显示。
-
要提交暂存的文件:
git commit -m "<comment that describes the changes>"
更改已提交到分支。
提交所有更改
你可以使用一个命令暂存并提交所有更改:
git commit -a -m "<comment that describes the changes>"
注意确保你的提交不包含你不想记录到远程仓库的文件。通常,在提交更改之前,始终检查本地仓库的状态。
发送更改到极狐GitLab
要将所有本地更改推送到远程仓库:
git push <remote> <name-of-branch>
例如,将你的本地提交推送到 origin
远程的 main
分支:
git push origin main
有时 Git 不允许你推送到仓库。在这种情况下,你必须强制更新。
推送选项
{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- Offering: JihuLab.com, 极狐GitLab 私有化部署, 极狐GitLab 专属
{{< /details >}}
当你将更改推送到分支时,可以使用客户端的 Git 推送选项。在 Git 2.10 及更高版本中,使用 Git 推送选项可以:
在 Git 2.18 及更高版本中,你可以使用长格式 (--push-option
) 或更短的 -o
:
git push -o <push_option>
在 Git 2.10 到 2.17 版本中,必须使用长格式:
git push --push-option=<push_option>
有关服务器端控制和最佳实践的执行,请参见推送规则和服务器钩子。
极狐GitLab CI/CD 的推送选项
你可以使用推送选项跳过 CI/CD 流水线,或传递 CI/CD 变量。
{{< alert type=”note” >}}
推送选项不适用于合并请求流水线。
{{< /alert >}}
推送选项 | 描述 | 示例 |
---|---|---|
ci.input=<name>=<value> |
创建具有指定输入的流水线。 | 例如:git push -o ci.input='stage=test' -o ci.input='security_scan=false' 。使用字符串数组的示例:ci.input='["string", "double", "quotes"]'
|
ci.skip |
不为最新推送创建 CI/CD 流水线。仅跳过分支流水线,而不是合并请求流水线。这不会跳过 CI/CD 集成(如 Jenkins)的流水线。 | git push -o ci.skip |
ci.variable="<name>=<value>" |
为流水线提供 CI/CD 变量,如果由于推送创建了一个,则传递变量仅适用于分支流水线,而不是合并请求流水线。 | git push -o ci.variable="MAX_RETRIES=10" -o ci.variable="MAX_TIME=600" |
集成的推送选项
你可以使用推送选项跳过集成 CI/CD 流水线。
推送选项 | 描述 | 示例 |
---|---|---|
integrations.skip_ci |
跳过 CI/CD 集成(如 Atlassian Bamboo、Buildkite、Drone、Jenkins 和 JetBrains TeamCity)的推送事件。引入于极狐GitLab 16.2。 | git push -o integrations.skip_ci |
合并请求的推送选项
Git 推送选项可以在推送更改时为合并请求执行操作:
推送选项 | 描述 |
---|---|
merge_request.create |
为推送的分支创建新的合并请求。 |
merge_request.target=<branch_name> |
将合并请求的目标设置为特定分支,例如:git push -o merge_request.target=branch_name 。 |
merge_request.target_project=<project> |
将合并请求的目标设置为特定上游项目,例如:git push -o merge_request.target_project=path/to/project 。引入于极狐GitLab 16.6。 |
merge_request.merge_when_pipeline_succeeds |
在极狐GitLab 17.11 中被弃用,取而代之的是 auto_merge 选项。 |
merge_request.auto_merge |
将合并请求设置为自动合并。 |
merge_request.remove_source_branch |
当合并请求被合并时,移除源分支。 |
merge_request.squash |
设置合并请求在合并时将所有提交压缩为一个提交。引入于极狐GitLab 17.2。 |
merge_request.title="<title>" |
设置合并请求的标题。例如:git push -o merge_request.title="The title I want" 。 |
merge_request.description="<description>" |
设置合并请求的描述。例如:git push -o merge_request.description="The description I want" 。 |
merge_request.draft |
将合并请求标记为草稿。例如:git push -o merge_request.draft 。引入于极狐GitLab 15.0。 |
merge_request.milestone="<milestone>" |
设置合并请求的里程碑。例如:git push -o merge_request.milestone="3.0" 。 |
merge_request.label="<label>" |
为合并请求添加标签。如果标签不存在,则创建它。例如,对于两个标签:git push -o merge_request.label="label1" -o merge_request.label="label2" 。 |
merge_request.unlabel="<label>" |
从合并请求中移除标签。例如,对于两个标签:git push -o merge_request.unlabel="label1" -o merge_request.unlabel="label2" 。 |
merge_request.assign="<user>" |
将用户分配给合并请求。接受用户名或用户 ID。例如,对于两个用户:git push -o merge_request.assign="user1" -o merge_request.assign="user2" 。在极狐GitLab 15.5中添加了对用户名的支持。 |
merge_request.unassign="<user>" |
从合并请求中移除分配的用户。接受用户名或用户 ID。例如,对于两个用户:git push -o merge_request.unassign="user1" -o merge_request.unassign="user2" 。在极狐GitLab 15.5中添加了对用户名的支持。 |
密钥推送保护的推送选项
你可以使用推送选项跳过密钥推送保护。
推送选项 | 描述 | 示例 |
---|---|---|
secret_push_protection.skip_all |
不对该推送中的任何提交执行密钥推送保护。 | git push -o secret_push_protection.skip_all |
GitGuardian 集成的推送选项
你可以使用相同的密钥推送保护推送选项来跳过 GitGuardian 密钥检测。
推送选项 | 描述 | 示例 |
---|---|---|
secret_detection.skip_all |
在极狐GitLab 17.2 中弃用。请改用 secret_push_protection.skip_all 。 |
git push -o secret_detection.skip_all |
secret_push_protection.skip_all |
不执行 GitGuardian 密钥检测。 | git push -o secret_push_protection.skip_all |
推送选项的格式
如果你的推送选项需要包含空格的文本,请用双引号 ("
) 将文本括起来。如果没有空格,可以省略引号。示例:
git push -o merge_request.label="Label with spaces"
git push -o merge_request.label=Label-with-no-spaces
要结合推送选项一次完成多个任务,请使用多个 -o
(或 --push-option
)标志。此命令创建一个新合并请求,目标为一个分支(my-target-branch
),并设置自动合并:
git push -o merge_request.create -o merge_request.target=my-target-branch -o merge_request.auto_merge
为推送创建 Git 别名
将推送选项添加到 Git 命令中可能会创建非常长的命令。如果你经常使用相同的推送选项,可以为它们创建 Git 别名。Git 别名是较长 Git 命令的命令行快捷方式。
要为自动合并 Git 推送选项创建并使用 Git 别名:
-
在你的终端窗口中,运行此命令:
git config --global alias.mwps "push -o merge_request.create -o merge_request.target=main -o merge_request.auto_merge"
-
要使用该别名推送目标为默认分支(
main
)并自动合并的本地分支,运行此命令:git mwps origin <local-branch-name>