

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在中创建提交 AWS CodeCommit
<a name="how-to-create-commit"></a>

在为新存储库创建第一个提交时，使用 AWS CLI 和**put-file**命令。这将创建第一个提交，并让您可以为新存储库创建和指定默认分支。您可以使用 Git 或 AWS CLI 在 CodeCommit 仓库中创建提交。如果本地存储库已连接到 CodeCommit 存储库，则可以使用 Git 将提交从本地存储库推送到存储库。 CodeCommit 要直接在 CodeCommit 控制台中创建提交，请参阅[在 AWS CodeCommit 存储库中创建或添加文件](how-to-create-file.md)和[编辑 AWS CodeCommit 存储库中文件的内容](how-to-edit-file.md)。

**注意**  
作为最佳实践，我们建议您使用支持的最新版本的 AWS CLI、Git 和其他软件。如果您使用 AWS CLI，请确保安装了最新版本，以确保您使用的版本包含该`create-commit`命令。

**Topics**
+ [使用创建仓库的第一个提交 AWS CLI](#how-to-create-first-commit)
+ [使用 Git 客户端创建提交](#how-to-create-commit-git)
+ [使用创建提交 AWS CLI](#how-to-create-commit-cli)

## 使用创建仓库的第一个提交 AWS CLI
<a name="how-to-create-first-commit"></a>

您可以使用 AWS CLI 和`put-file`命令为存储库创建您的第一个提交。使用 **put-file** 会创建第一个提交，该分支会将文件添加到空存储库，并创建一个具有您指定的名称的分支。它会将新分支指定为存储库的默认分支。

**注意**  
要将 AWS CLI 命令与一起使用 CodeCommit，请安装 AWS CLI。有关更多信息，请参阅 [命令行参考](cmd-ref.md)。<a name="create-first-commit"></a>

## 要为存储库创建第一个提交，请使用 AWS CLI


1. 在本地计算机上，创建要作为第一个文件添加到 CodeCommit存储库的文件。一个常见做法是创建一个 `README.md` markdown 文件，向其他存储库用户说明此存储库的用途。如果您包含`README.md`文件，则该文件的内容将自动显示在 CodeCommit控制台中存储库的 “**代码**” 页面的底部。

1. 在终端或命令行中，运行 **put-file** 命令，并指定：
   + 要将第一个文件添加到的存储库的名称。
   + 要创建为默认分支的分支的名称。
   + 文件的本地位置。用于此位置的语法取决于您的本地操作系统。
   + 要添加的文件的名称，包括更新的文件在存储库中的存储路径。
   + 您希望与此文件关联的用户名和电子邮件。
   + 一条提交消息，说明您为什么添加此文件。

   用户名、电子邮件地址和提交消息是可选的，但可帮助其他用户了解执行更改的人员以及原因。如果您不提供用户名，则 CodeCommit 默认使用您的 IAM 用户名或控制台登录名的派生形式作为作者姓名。

   例如，要将名为 base 6 *README.md* 的编码文件内容为示例的文件*MyDemoRepo*添加到名为以下分支的存储库中：*development*

   ```
   aws codecommit put-file --repository-name MyDemoRepo --branch-name development --file-path README.md --file-content "EXAMPLE0123456789example0123456789EXAMPLE1" --name "Mary Major" --email "mary_major@example.com" --commit-message "I added a quick readme for our new team repository."
   ```

   如果成功，该命令返回类似以下内容的输出：

   ```
   {
       "commitId": "724caa36EXAMPLE",
       "blobId": "a8a94062EXAMPLE",
       "treeId": "08b2fc73EXAMPLE"
   }
   ```

## 使用 Git 客户端创建提交
<a name="how-to-create-commit-git"></a>

您可以使用安装在本地计算机上的 Git 客户端创建提交，然后将这些提交推送到 CodeCommit 仓库。

1. 完成前提条件，包括[设置 ](setting-up.md)。
**重要**  
如果您尚未完成设置，则无法使用 Git 连接或提交到存储库。

1. 确保将在正确的分支中创建提交。要查看可用分支的列表并确认您当前设置使用的分支，请运行 **git branch**。这会显示所有分支。当前分支旁边会显示星号 (`*`)。要切换到其他分支，请运行 **git checkout *branch-name***。如果这是您的第一个提交，请运行 **git config ** 命令，将 Git 客户端配置为使用您要用于该分支的名称创建初始分支。例如，如果你想让默认分支的名称为*development*：

   ```
   git config --local init.defaultBranch development
   ```
**提示**  
此命令仅在 Git v.2.28 及更高版本中可用。  
您也可以运行以下命令，将所有新创建的存储库的默认分支名称设置为 **development**：  

   ```
   git config --global init.defaultBranch development
   ```

1. 对分支做出更改 (例如，添加、修改或删除文件)。

   例如，在本地存储库中创建名为 `bird.txt` 的文件并写入以下文本：

   ```
   bird.txt
   --------
   Birds (class Aves or clade Avialae) are feathered, winged, two-legged, warm-blooded, egg-laying vertebrates.
   ```

1. 运行 **git status**，这应会指示 `bird.txt` 尚未包含在任何待处理提交中：

   ```
   ...        
   Untracked files:
     (use "git add <file>..." to include in what will be committed)
           
           bird.txt
   ```

1. 运行 **git add bird.txt** 将新文件包含在待处理提交中。

1. 如果您再次运行 **git status**，应显示与以下内容类似的输出。它指示 `bird.txt` 现已加入到待处理提交中，或已暂存并等待提交：

   ```
   ...
   Changes to be committed:
     (use "git reset HEAD <file>..." to unstage)
       
           new file:   bird.txt
   ```

1. 要完成提交，请运行 **git commit** 并指定 `-m` 选项（例如，** git commit -m "*Adding bird.txt to the repository.*"**）。`-m` 选项用于创建提交消息。

1. 如果您再次运行 **git status**，应显示与以下内容类似的输出。它表示提交已准备好从本地存储库推送到 CodeCommit 存储库：

   ```
   ...    
   nothing to commit, working directory clean
   ```

1. 在将已完成的提交从本地存储库推送到 CodeCommit 存储库之前，您可以通过运行来查看正在推送的内容**git diff --stat *remote-name*/*branch-name***，其中*remote-name*是本地 CodeCommit 存储库使用的昵称以及*branch-name*要比较的分支的名称。
**提示**  
要获取别名，请运行 **git remote**。要获取分支名称列表，请运行 **git branch**。当前分支旁边会显示星号 (`*`)。您也可以运行 **git status** 来获取当前分支的名称。
**注意**  
如果您克隆了存储库，则从本地存储库的角度来看，*remote-name*这不是存储库的 CodeCommit 名称。克隆存储库时，会自动设置*remote-name*为`origin`。

   例如，**git diff --stat origin/main** 将显示类似以下内容的输出：

   ```
   bird.txt | 1 +
   1 file changed, 1 insertion(+)
   ```

   输出假设您已经将本地存储库连接到 CodeCommit 存储库。（有关说明，请参阅[连接存储库](how-to-connect.md)。）

1. 当你准备好将提交从本地存储库推送到 CodeCommit 存储库时，运行**git push *remote-name* *branch-name***，其中*remote-name*是本地存储库使用的昵称，*branch-name*也是要推送到 CodeCommit 存储库的分支的名称。 CodeCommit 

   例如，运行 **git push origin main** 将显示类似以下内容的输出：

   对于 HTTPS：

   ```
   Counting objects: 7, done.
   Delta compression using up to 4 threads.
   Compressing objects: 100% (4/4), done.
   Writing objects: 100% (5/5), 516 bytes | 0 bytes/s, done.
   Total 5 (delta 2), reused 0 (delta 0)
   remote:
   To https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo
       b9e7aa6..3dbf4dd main -> main
   ```

   对于 SSH：

   ```
   Counting objects: 7, done.
   Delta compression using up to 4 threads.
   Compressing objects: 100% (4/4), done.
   Writing objects: 100% (5/5), 516 bytes | 0 bytes/s, done.
   Total 5 (delta 2), reused 0 (delta 0)
   remote:
   To ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo
       b9e7aa6..3dbf4dd main -> main
   ```
**提示**  
如果向 **git push** 添加 `-u` 选项（例如，**git push -u origin main**），则以后只需运行 **git push**，因为已设置了上游跟踪信息。要获取上游跟踪信息，请运行 **git remote show *remote-name***（例如，**git remote show origin**）。

有关更多选项，请参阅 Git 文档。

## 使用创建提交 AWS CLI
<a name="how-to-create-commit-cli"></a>

您可以使用 AWS CLI 和`create-commit`命令在指定分支的尖端为存储库创建提交。您还可以创建未引用的合并提交来表示合并两个提交说明符的结果。有关更多信息，请参阅[创建非引用提交](how-to-resolve-conflict-pull-request.md#create-unreferenced-merge-commit)。

**注意**  
要将 AWS CLI 命令与一起使用 CodeCommit，请安装 AWS CLI。有关更多信息，请参阅 [命令行参考](cmd-ref.md)。<a name="create-commit"></a>

**创建提交**

1. 在本地计算机上，进行要提交到 CodeCommit 存储库的更改。

1. 在终端或命令行中，运行 **create-commit** 命令，并指定：
   + 要将更改提交到的存储库。
   + 要将更改提交到的分支。
   + 对该分支进行的最新提交的完整提交 ID，也称为顶端或头提交或父提交 ID。
   + 如果所做的更改删除了这些文件夹的内容，是否保留任何空文件夹。默认情况下，此值为 false。
   + 有关要添加、更改或删除的文件的信息。
   + 希望与这些更改关联的用户名和电子邮件。
   + 一条提交消息，说明您进行这些更改的原因。

   用户名、电子邮件地址和提交消息是可选的，但可帮助其他用户知道更改的执行者及原因。如果您不提供用户名，则 CodeCommit 默认使用您的 IAM 用户名或控制台登录名的派生形式作为作者姓名。

   例如，为存储库创建提交，将`README.md`文件添加到分*main*支*MyDemoRepo*中名为的存储库中。该文件采用 Base64 格式，内容为“Welcome to our team repository\$1”：

   ```
   aws codecommit create-commit --repository-name MyDemoRepo --branch-name main --parent-commit-id 4c925148EXAMPLE --put-files "filePath=README.md,fileContent=V2VsY29tZSB0byBvdXIgdGVhbSByZXBvc2l0b3J5IQo="
   ```
**提示**  
要获取父提交 ID，请运行 [get-branch](how-to-view-branch-details.md#how-to-view-branch-details-cli-details) 命令。

   如果成功，该命令返回类似以下内容的输出：

   ```
   {
       "commitId": "4df8b524-EXAMPLE",
       "treeId": "55b57003-EXAMPLE",
       "filesAdded": [
           {
               "blobId": "5e1c309dEXAMPLE",
               "absolutePath": "meeting.md",
               "fileMode": "NORMAL"
           }
       ],
       "filesDeleted": [],
       "filesUpdated": []
   }
   ```

   要创建对名为*file1.py*和的文件进行更改的提交*file2.txt*，请将文件从重命名*picture.png*为*image1.png*并将其从名为、的目录移*pictures*至名为*images*、的目录，然后删除名为的存储库*ExampleSolution.py*中名为的文件，该分支*MyDemoRepo*上名为，*MyFeatureBranch*其最新提交 ID 为：*4c925148EXAMPLE*

   ```
   aws codecommit create-commit --repository-name MyDemoRepo --branch-name MyFeatureBranch --parent-commit-id 4c925148EXAMPLE --author-name "Saanvi Sarkar"
    --email "saanvi_sarkar@example.com" --commit-message "I'm creating this commit to update a variable name in a number of files."
    --keep-empty-folders false  --put-files '{"filePath": "file1.py", "fileMode": "EXECUTABLE", "fileContent": "bucket_name = sys.argv[1] region = sys.argv[2]"}'
   '{"filePath": "file2.txt", "fileMode": "NORMAL", "fileContent": "//Adding a comment to explain the variable changes in file1.py"}' '{"filePath": "images/image1.png",
   "fileMode": "NORMAL", "sourceFile": {"filePath": "pictures/picture.png", "isMove": true}}' --delete-files filePath="ExampleSolution.py"
   ```
**注意**  
根据您的操作系统，**--put-files** 段的语法略有不同。以上示例针对 Linux、macOS 或 Unix 用户和具有 Bash 仿真器的 Windows 用户进行了优化。使用命令行或 Powershell 的 Windows 用户应使用适合这些系统的语法。

   如果成功，该命令返回类似以下内容的输出：

   ```
   {
      "commitId": "317f8570EXAMPLE",
      "treeId": "347a3408EXAMPLE",
      "filesAdded": [
           {
           "absolutePath": "images/image1.png",
           "blobId": "d68ba6ccEXAMPLE",
           "fileMode": "NORMAL"
           }
       ],
       "filesUpdated": [
           {
           "absolutePath": "file1.py",
           "blobId": "0a4d55a8EXAMPLE",
           "fileMode": "EXECUTABLE"
           },
           {
           "absolutePath": "file2.txt",
           "blobId": "915766bbEXAMPLE",
           "fileMode": "NORMAL"
           }
       ],
       "filesDeleted": [
           {
           "absolutePath": "ExampleSolution.py",
           "blobId": "4f9cebe6aEXAMPLE",
           "fileMode": "EXECUTABLE"
           },
           {
           "absolutePath": "pictures/picture.png",
           "blobId": "fb12a539EXAMPLE",
           "fileMode": "NORMAL"
           }
       ]
   }
   ```