当你对仓库中的文件进行更改时,Git 会根据检出的分支的最新版本跟踪这些更改。你可以使用 Git 命令审查并提交更改到分支,然后将你的工作推送到极狐GitLab。

添加并提交本地更改

当你准备好将更改写入分支时,可以提交这些更改。一个提交包含记录有关更改信息的注释,通常会成为分支的新顶点。

Git 不会自动将你移动、修改或删除的任何文件包含在提交中。这可以防止你不小心包含某个更改或文件,比如临时目录。要在提交中包含更改,可以使用 git add 对其进行暂存。

要暂存并提交你的更改:

  1. 在你的仓库中,对于每个你想添加的文件或目录,运行 git add <file name or path>

    要暂存当前工作目录中的所有文件,运行 git add .

  2. 确认文件已被添加到暂存区:

    git status
    

    文件将以绿色显示。

  3. 要提交暂存的文件:

    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 别名:

  1. 在你的终端窗口中,运行此命令:

    git config --global alias.mwps "push -o merge_request.create -o merge_request.target=main -o merge_request.auto_merge"
    
  2. 要使用该别名推送目标为默认分支(main)并自动合并的本地分支,运行此命令:

    git mwps origin <local-branch-name>
    

相关主题

  1. 常用 Git 命令