[Update] CodeCommitに2つのマージ方法が追加されました

2019.06.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

清々しい朝に素晴らしいアップデートが発表されましたね。

CodeCommitでプルリクエストをmergeする際の、3-way mergeSquash mergeがサポートされました。
以前まではFast Forwardでのmergeのみでしたので今回のアップデートでついに3つのマージ方法が揃います。
さらに、コンフリクト解消用のWebエディタも今回のアップデートで追加されました。

どんどん便利になるCodeCommitを実際に触っていきます。

リポジトリを作る

まずは、CodeCommit上にリポジトリを作ります。

$ aws codecommit create-repository --repository-name mergeeTestRepo

{
    "repositoryMetadata": {
        "accountId": "xxxxxxxxxxxxxx",
        "repositoryId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
        "repositoryName": "mergeeTestRepo",
        "lastModifiedDate": 1560211946.476,
        "creationDate": 1560211946.476,
        "cloneUrlHttp": "https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/mergeeTestRepo",
        "cloneUrlSsh": "ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/mergeeTestRepo",
        "Arn": "arn:aws:codecommit:ap-northeast-1:xxxxxxxxxxxxxx:mergeeTestRepo"
    }
}

リポジトリができたらgit cloneで手元に環境を呼び出して適当に作業をしてみます。

$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/mergeeTestRepo
 Cloning into 'mergeeTestRepo'...
 Username for 'https://git-codecommit.ap-northeast-1.amazonaws.com': xxxxx
 Password for 'https:// 031-at-721318490750 @git-codecommit.ap-northeast-1.amazonaws.com': 
 warning: You appear to have cloned an empty repository.

その後に少しcommitをして、リモートリポジトリにpushしました。CodeCommitを見ると、リモートへの反映が確認できますね。  

これで準備ができたので実際にmergeをします。

Squash merge

Squash mergeをざっくり説明すると、commitを1つにまとめてブランチに対してmergeをすることを指します。
gitのcliでは git merge --squash がサポートされており、今回のアップデートではプルリクエストでこれがサポートされています。
実際にやってみます。

$ git checkout -b squashTest
$ vi template.yaml 
$ git add .
$ git commit -m 'add VPC'
$ vi template.yaml 
$ git add .
$ git commit -m 'add IGW'
$ git push -u origin squashTest

そしたらマネジメントコンソールに戻って、プルリクエストを作成します。

ターゲットにmasterを指定して、ソースにsquashTestを指定します。

プルリクエストが出来上がったので、マージを選択します。

スカッシュしてマージが追加されているのでこれを選択すると、Squash mergeができます。

実際にcommitの履歴を確認すると、masterブランチに対して3つのcommitのみ確認できます。

便利ですね。3way mergeについても同じ方法でできるので今回は省きます。
次にコンフリクトを解消するためのWebエディタを試してみます。

conflict resolution editor

先ほどと同じようにブランチを作って、リモートにpushします。

$ git checkout -b conflictTest
$ vi template.yaml 
$ git commit .
$ git commit -m 'update name'
$ git push -u origin conflictTest

一旦masterブランチに戻ってコンフリクトが発生するような編集を加えてリモートにpushします。

$ git checkout master
$ vi template.yaml 
$ git commit .
$ git commit -m 'update name'
$ git push -u origin master

そしたらマネジメントコンソールに戻って、プルリクエストを作成します。
コンフリクトしてるのでmergeできない旨のメッセージが表示されていますね。そのメッセージの中にマネジメントコンソールでコンフリクトを解消できるということも書いてありますね。
プルリクエストを作ります。

プルリクエストの画面に戻ると先ほどなかった、競合の解決という箇所が追加されています。
ここからWebエディタを開きます。

確かにコンフリクトを解消できそうなWebエディタが使えます。
このWebエディタでは、Tabキー⌘ + DCtl + K などのショートカットが有効なので非常に使いやすい印象です。

コンフリクトを解消してプルリクエストの更新を押すと、プルリクエストが更新されます。
具体的には、新規commitが作成されます。commitメッセージは、競合はコンソールで解決されました。となり、commit AuthorなどはWebエディタを操作したIAM User名が指定されます。

プルリクエストの更新後先ほどと同じ手順でプルリクエストをmergeしてクローズすることができます。

さいごに

このアップデートを見たときにマジマージという感じで感情が昂りました。
今後も便利なアップデートがされていきどんどん使いやすくなるといいですね。