Skip to content

devops-infra/action-commit-push

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🚀 GitHub Action for Committing Changes to Repository

🏗️ Multi-Architecture Support: amd64 and aarch64/arm64

⚠️ Recent Changes in v0.11.0

  • Force behavior updated: force: true now uses git push --force (breaking change)
  • New parameter: force_with_lease for safer force pushing with --force-with-lease
  • Amend improvements: Can now combine amend: true with commit_message to change commit messages
  • Release process: Fully automated releases - zero manual work required!

A powerful GitHub Action for automatically committing and pushing changes back to your repository. Perfect for automation workflows and integrates seamlessly with devops-infra/action-pull-request.

📦 Available on

✨ Features

  • 📝 Custom commit messages: Add custom prefixes and messages to commits
  • 🌿 Branch management: Create new branches automatically with optional timestamps
  • ⏰ Timestamp support: Add timestamps to branch names for cron-based updates
  • 🔄 Integration-ready: Works seamlessly with other DevOps workflows
  • 💪 Force push options: Support for --force and --force-with-lease when needed
  • 🔀 Pull request integration: Perfect companion for automated PR workflows

📊 Badge Swag

GitHub repo GitHub code size in bytes GitHub last commit GitHub license
DockerHub Docker version Image size Docker Pulls

📖 API Reference

      - name: Run the Action
        uses: devops-infra/action-commit-push@master
        with:
          github_token: "${{ secrets.GITHUB_TOKEN }}"
          add_timestamp: true
          commit_prefix: "[AUTO]"
          commit_message: "Automatic commit"
          force: false
          force_with_lease: false
          target_branch: update/version

🔧 Input Parameters

Input Variable Required Default Description
github_token Yes "" Personal Access Token for GitHub for pushing the code.
add_timestamp No false Whether to add the timestamp to a new branch name. Uses format %Y-%m-%dT%H-%M-%SZ.
amend No false Whether to make an amendment to the previous commit (--amend). Can be combined with commit_message to change the commit message.
commit_prefix No "" Prefix added to commit message. Combines with commit_message.
commit_message No "" Commit message to set. Combines with commit_prefix. Can be used with amend to change the commit message.
force No false Whether to use force push (--force). Use only when you need to overwrite remote changes. Potentially dangerous.
force_with_lease No false Whether to use force push with lease (--force-with-lease). Safer than force as it checks for remote changes. Set fetch-depth: 0 for actions/checkout.
no_edit No false Whether to not edit commit message when using amend (--no-edit).
organization_domain No github.com GitHub Enterprise domain name.
target_branch No current branch Name of a new branch to push the code into. Creates branch if not existing.

📤 Output Parameters

Output Description
files_changed List of changed files, as returned by git diff --staged --name-status.
branch_name Name of the branch code was pushed into.

💻 Usage Examples

📝 Basic Example: Commit and Push to Current Branch

Commit and push changes to the currently checked out branch.

name: Push changes
on:
  push
jobs:
  change-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v5
      - name: Change something
        run: |
          find . -type f -name "*.md" -print0 | xargs -0 sed -i "s/foo/bar/g"
      - name: Commit and push changes
        uses: devops-infra/action-commit-push@v0.11
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          commit_message: "Replace foo with bar"

🔀 Advanced Example: Commit, Push, and Create Pull Request

Commit and push changes to a new branch and create a pull request using devops-infra/action-pull-request.

name: Push changes and create PR
on:
  push
jobs:
  change-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v5
      - name: Change something
        run: |
          find . -type f -name "*.md" -print0 | xargs -0 sed -i "s/foo/bar/g"
      - name: Commit and push changes
        uses: devops-infra/action-commit-push@v.11
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          commit_prefix: "[AUTO-COMMIT] "
          commit_message: "Replace foo with bar"
      - name: Create pull request
        uses: devops-infra/action-pull-request@v0.6
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          body: "**Automated pull request**<br><br>Replaced foo with bar"
          title: ${{ github.event.commits[0].message }}

💪 Force Push Example: Amending Previous Commit

When you need to amend the previous commit and force push (useful for fixing commit messages or adding forgotten changes).

name: Amend and force push
on:
  workflow_dispatch:
    inputs:
      new_commit_message:
        description: 'New commit message'
        required: true
        default: 'Updated commit message'

jobs:
  amend-commit:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository with full history
        uses: actions/checkout@v5
        with:
          fetch-depth: 0  # Required for force_with_lease
      - name: Make some changes
        run: |
          echo "Additional content" >> README.md
      - name: Amend and force push with lease
        uses: devops-infra/action-commit-push@v0.11
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          commit_message: ${{ github.event.inputs.new_commit_message }}
          amend: true
          force_with_lease: true  # Safer force push option

📝 Amend Options

When using amend: true, you have several options for handling the commit message:

  1. Change the commit message: Set commit_message to provide a new message

    - uses: devops-infra/action-commit-push@master
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        commit_message: "Fixed typo in documentation"
        amend: true
        force_with_lease: true
  2. Keep existing message: Set no_edit: true to keep the original commit message

    - uses: devops-infra/action-commit-push@master
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        amend: true
        no_edit: true
        force_with_lease: true
  3. Default behavior: If neither is set, uses "Files changed:" with file list (when files are modified)

💡 Note: Amending works even without file changes - useful for just changing commit messages!

🏷️ Version Tags: vX, vX.Y, vX.Y.Z

This action supports three tag levels for flexible versioning:

  • vX: Always points to the latest patch of a major version (e.g., v1v1.2.3).
    Benefit: Get all latest fixes for a major version automatically.

  • vX.Y: Always points to the latest patch of a minor version (e.g., v1.2v1.2.3).
    Benefit: Stay on a minor version, always up-to-date with bugfixes.

  • vX.Y.Z: Fixed to a specific release (e.g., v1.2.3).
    Benefit: Full reproducibility—never changes.

Use the tag depth that matches your stability needs.

⚠️ Force Push Options

This action provides two force push options for different scenarios:

🛡️ force_with_lease (Recommended)

  • Uses git push --force-with-lease
  • Safer option that checks if someone else has pushed changes to the remote branch
  • Prevents accidentally overwriting other people's work
  • Required: Set fetch-depth: 0 in your actions/checkout step
  • Use case: Amending commits, rebasing, or other history modifications

force (Use with Caution)

  • Uses git push --force
  • Potentially dangerous as it will overwrite remote changes unconditionally
  • No safety checks - will overwrite any remote changes
  • Use case: Only when you're absolutely certain you want to overwrite remote changes

⚠️ Important: Never use both options simultaneously. force_with_lease takes precedence if both are set to true.

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request. Refer to the CONTRIBUTING for guidelines.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🔗 Related Actions

💬 Support

If you have any questions or need help, please:

  • 📝 Create an issue
  • 🌟 Star this repository if you find it useful!