Skip to content

cz check range sometimes failed in GitLab CI #593

Description

@SsuperL

Description

Runcz check --range origin/master..HEAD to check commits in CI occasionally fails.
And it worked after I retried the job.But sometimes it didn't work after retrying multiple times.
I couldn't find out the reason ,

Steps to reproduce

lint:
retry: 1
script:
- cz version
- cz check --rev-range origin/master..HEAD

Current behavior

cz check --rev-range origin/master..HEAD failed. Outputs attached below:

  fatal: ambiguous argument 'master..HEAD': unknown revision or path not in the working tree.
  Use '--' to separate paths from revisions, like this:
  'git <command> [<revision>...] -- [<file>...]'

Desired behavior

cz check --rev-range can run successfully in gitlab CI.

Screenshots

image

Environment

commitizen version: 2.34.0
python version: 3.7.5
operating system: Linux

Activity

  1. Lee-W commented on Sep 22, 2022

    @Lee-W
    Member

    Is it possible that the git repo doesn't setup remote 🤔

  2. SsuperL commented on Sep 23, 2022

    @SsuperL
    Author

    I run command git remote -v in the CI , and it shows that the remote has been setup.

  3. SsuperL commented on Sep 23, 2022

    @SsuperL
    Author

    image

  4. Lee-W commented on Sep 23, 2022

    @Lee-W
    Member

    Hmmm... As I'm not able to reproduce it, I don't have any clue on how we could fix it. But we can keep it open till you or someone encounter this issue again with more detail

  5. SsuperL commented on Sep 25, 2022

    @SsuperL
    Author

    Actually,this issue has come up again.

  6. SsuperL commented on Sep 26, 2022

    @SsuperL
    Author

    image
    And when I merged the branch into master,it said that there is no commit found range origin/master..HEAD.

  7. Lee-W commented on Sep 26, 2022

    @Lee-W
    Member

    Do you mean after merging back to the master branch? If that's the case, your HEAD will on on master so the result seem to be expected.

  8. SsuperL commented on Sep 27, 2022

    @SsuperL
    Author

    Do you mean after merging back to the master branch? If that's the case, your HEAD will on on master so the result seem to be expected.

    yes. Or can it skip check when there's no commit rather than make the job failed?

    image

  9. Lee-W commented on Oct 3, 2022

    @Lee-W
    Member

    @SsuperL Please try cz --no-raise 3 check --rev-range master... it's output the message with a zero return code

    https://commitizen-tools.github.io/commitizen/bump/#easy-way

  10. SsuperL commented on Oct 9, 2022

    @SsuperL
    Author

    cz --no-raise 3 check --rev-range master..

    I'll try it.Thank you!

  11. Lujeni commented on Oct 19, 2022

    @Lujeni

    @SsuperL did you try to git fetch before your command ? its seems GitLab CI dont fetch every branch

  12. SsuperL commented on Oct 24, 2022

    @SsuperL
    Author

    @SsuperL did you try to git fetch before your command ? its seems GitLab CI dont fetch every branch
    No, but it only appeared on some machines. And the command git branch -r shows branch origin/master exists.

  13. SsuperL commented on Nov 29, 2022

    @SsuperL
    Author

    image

  14. Lee-W commented on Nov 29, 2022

    @Lee-W
    Member

    do you have remote origin and branch master?

  15. 5 remaining items

  16. baggiponte commented on Mar 22, 2023

    @baggiponte

    Hi, I am having the same issue outside of CI. When I git push with the pre-push pre-commit hook, I get the following:

    fatal: ambiguous argument 'origin/HEAD..HEAD': unknown revision or path not in the working tree.
    Use '--' to separate paths from revisions, like this:
    'git <command> [<revision>...] -- [<file>...]'
    

    Whereas if I skip the verification everything works fine.

    Unfortunately the repo is private and I can't share the url, but the configs are:

    default_install_hook_types:
      - pre-commit
      - pre-push
    default_language_version:
      python: python3.9
    repos:
      - repo: https://github.com/commitizen-tools/commitizen
        rev: v2.42.1
        hooks:
          - id: commitizen-branch
            stages: [ push ]

    And the hook (which should not matter) is:

    #!/usr/bin/env bash
    # File generated by pre-commit: https://pre-commit.com
    # ID: 138fd403232d2ddd5efb44317e38bf03
    
    # start templated
    INSTALL_PYTHON=/Users/lucabaggi/.local/share/pipx/venvs/pre-commit/bin/python
    ARGS=(hook-impl --config=.pre-commit-config.yaml --hook-type=pre-push)
    # end templated
    
    HERE="$(cd "$(dirname "$0")" && pwd)"
    ARGS+=(--hook-dir "$HERE" -- "$@")
    
    if [ -x "$INSTALL_PYTHON" ]; then
        exec "$INSTALL_PYTHON" -mpre_commit "${ARGS[@]}"
    elif command -v pre-commit > /dev/null; then
        exec pre-commit "${ARGS[@]}"
    else
        echo '`pre-commit` not found.  Did you forget to activate your virtualenv?' 1>&2
        exit 1
    fi
  17. SsuperL commented on Mar 23, 2023

    @SsuperL
    Author

    Hi, I am having the same issue outside of CI. When I git push with the pre-push pre-commit hook, I get the following:

    fatal: ambiguous argument 'origin/HEAD..HEAD': unknown revision or path not in the working tree.
    Use '--' to separate paths from revisions, like this:
    'git <command> [<revision>...] -- [<file>...]'
    

    Whereas if I skip the verification everything works fine.

    Unfortunately the repo is private and I can't share the url, but the configs are:

    default_install_hook_types:
      - pre-commit
      - pre-push
    default_language_version:
      python: python3.9
    repos:
      - repo: https://github.com/commitizen-tools/commitizen
        rev: v2.42.1
        hooks:
          - id: commitizen-branch
            stages: [ push ]

    And the hook (which should not matter) is:

    #!/usr/bin/env bash
    # File generated by pre-commit: https://pre-commit.com
    # ID: 138fd403232d2ddd5efb44317e38bf03
    
    # start templated
    INSTALL_PYTHON=/Users/lucabaggi/.local/share/pipx/venvs/pre-commit/bin/python
    ARGS=(hook-impl --config=.pre-commit-config.yaml --hook-type=pre-push)
    # end templated
    
    HERE="$(cd "$(dirname "$0")" && pwd)"
    ARGS+=(--hook-dir "$HERE" -- "$@")
    
    if [ -x "$INSTALL_PYTHON" ]; then
        exec "$INSTALL_PYTHON" -mpre_commit "${ARGS[@]}"
    elif command -v pre-commit > /dev/null; then
        exec pre-commit "${ARGS[@]}"
    else
        echo '`pre-commit` not found.  Did you forget to activate your virtualenv?' 1>&2
        exit 1
    fi

    Have you tried git fetch ? That works for me.

  18. baggiponte commented on Mar 23, 2023

    @baggiponte

    Have you tried git fetch ? That works for me.

    Does not for me... Perhaps it can mess up if I have git push --force previously?

  19. baggiponte commented on Mar 27, 2023

    @baggiponte

    Hello, if I run cz check --rev-range origin/main..HEAD it works. I noticed that the pre-commit hook has --rev-range origin/HEAD..HEAD which is an invalid ref. Perhaps when the repo has multiple branches the reference becomes invalid? Will try to make a reprex soon.

  20. johanmynhardt commented on Dec 21, 2023

    @johanmynhardt

    The following fixed it for me:

    git remote set-head origin -a

    Eventually found a semi-good explanation at: https://learnku.com/articles/71493

    (My issue is actually when I'm trying to run git push with the pre-push hook enabled, which then gives a similar error on ambiguity.)

  21. AdrianDC commented on Aug 19, 2024

    @AdrianDC
    Contributor

    Checking older or related issues to access the tool's status.

  22. dboeckenhoff commented on Jan 14, 2025

    @dboeckenhoff

    Having the same issue as new user in 2025; git fetch did not help

  23. Lee-W commented on Mar 30, 2025

    @Lee-W
    Member

    Having the same issue as new user in 2025; git fetch did not help

    Hey could you please provide an example so that we could try to reproduce and see what's happening? Thanks!

  24. added theissue type on Mar 30, 2025
  25. bearomorphism commented on May 9, 2026

    @bearomorphism
    Collaborator

    Triage from #1964: This is caused by GitLab CI's shallow clone — origin/master isn't present in the runner's local refs — not a commitizen bug. Workaround: set GIT_DEPTH: 0 in your .gitlab-ci.yml (or git fetch --unshallow / git fetch origin master:master before running cz check --rev-range). Suggesting we close this.

  26. bearomorphism commented on May 9, 2026

    @bearomorphism
    Collaborator

    Verification update (re #1964)

    Reproduced against current master (4.15.1):

    • git clone --depth=1 of the default branch — cz check --rev-range origin/master..HEAD works fine (origin/master is present).
    • A more accurate GitLab-runner simulation (shallow + single-branch fetch missing master refs) reproduces the exact failure:
      fatal: ambiguous argument 'origin/master..HEAD': unknown revision or path not in the working tree
      (exit 23)
      
    • Mitigations confirmed working:
      • git fetch --unshallow origin master:master — fixes master..HEAD
      • git fetch origin master:refs/remotes/origin/master — fixes origin/master..HEAD without unshallowing

    Verdict: NOT A BUG / CI ENVIRONMENT.

    The failure is purely a GitLab-CI shallow-clone artifact: origin/master isn't a fetched ref in the runner's local repo. Commitizen passes the rev-range to git log, which errors as expected.

    Workaround for the user's GitLab pipeline:

    variables:
      GIT_DEPTH: "0"   # or sufficient depth to include the merge base
    # or
    script:
      - git fetch origin master:refs/remotes/origin/master
      - cz check --rev-range origin/master..HEAD

    Closing-eligible.

    (One improvement we could make in commitizen itself: catch the git log error in cz check --rev-range and surface a clearer message like "Could not resolve rev-range '<range>': did you forget to fetch the base branch in CI?". Optional.)

  27. bearomorphism commented on May 9, 2026

    @bearomorphism
    Collaborator

    Closing as not a bug: reproduced as a CI shallow-clone artifact. Workarounds (GIT_DEPTH: 0 or git fetch origin master:refs/remotes/origin/master) confirmed working. See verification comment above.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions