Skip to content
Git Operations in GitHub actions

Git Operations in GitHub actions

February 19, 2025

Git commands, such as checkout, add, create a branch, make a pull request in Github actions.

Checkout (Clone a repository)

The official https://github.com/actions/checkout action clones the repository to $GITHUB_WORKSPACE. By default it uses built-in GITHUB_TOKEN for authentication.

In most cases, this is what you need:

- uses: actions/checkout@latest

The checkout action also supports pushing a commit to the same repo.

Warning

This may not work on protected branches that need status checks.

on: push
jobs:
  git-push:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: |
          date > generated.txt
          git config user.name github-actions
          git config user.email github-actions@github.com
          git add .
          git commit -m "generated"
          git push

However, no further workflows will be triggered with the GITHUB_TOKEN. You will need the following steps to trigger workflows.

How to trigger further CI runs

You will need either a Personal access token (PAT) with repo scope access as an action secret.

- uses: actions/checkout@latest
  with:
	token: ${{ secrets.PAT }}

Or a pair of SSH keys; the public key is the deploy key with write access, while the private key is an action secret variable SSH_PRIVATE_KEY.

- uses: actions/checkout@latest
  with:
	ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}

Push changes back to GitHub

The following actions are more convenient for commit and push than the official checkout action.

Create a pull request

The https://github.com/peter-evans/create-pull-request action will commit all files into a new branch and make a pull request to the target (default main) branch.

- name: Create Pull Request
  uses: peter-evans/create-pull-request@v6
  with:
  # token: ${{ secrets.PAT }} # A PAT is required for triggering pull request workflows
    token: ${{ secrets.GITHUB_TOKEN }}  # This will not trigger further workflows

Merge pull requests

Last updated on