---
title: "Troubleshooting"
manual: "TYPO3 Core Contribution Guide"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3contribute:troubleshooting"
source: "Troubleshooting/Index.rst"
rendered: "2026-09-26T04:50:59+00:00"
---

# Troubleshooting {#troubleshooting}

## Git Troubleshooting {#git-troubleshooting}

Before you're able to push your commits you have to [set up your account](https://docs.typo3.org/permalink/t3contribute:setting-up-your-account).
Make sure, you [setup Git](https://docs.typo3.org/permalink/t3contribute:setting-up-your-git-environment) correctly.

Also, you may want to [check your configuration](https://docs.typo3.org/permalink/t3contribute:git-show-config)

### Permission Denied {#permission-denied}

**shell command**

```bash
git push origin HEAD:refs/for/main
```

**result**

```none
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
```

If this error happens, double check if you are:

-   Using the correct SSH user name (which is your [user name on typo3.org](https://docs.typo3.org/permalink/t3contribute:typo3account))
-   If your username contains special characters (like @ or !), you must escape them using
    a backslash (or even better: use a username without special characters)
-   You must use an SSH key [known to Gerrit](https://docs.typo3.org/permalink/t3contribute:gerrit-ssh)
-   You must use the [correct URL](https://docs.typo3.org/permalink/t3contribute:git-setup-remote)

The following push command (with `-v`) shows you the push URL (which must contain `review.typo3.org`):

**shell command**

```bash
git push origin HEAD:refs/for/main -v
```

**result**

```none
Pushing to ssh://<username>@review.typo3.org:29418/REPOSITORY_NAME.git
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
```

### Debugging the SSH Connection {#debugging-the-ssh-connection}

Try connecting to the server with using an SSH client (OpenSSH, Putty, etc.):

**shell command**

```bash
ssh -p 29418 <username>@review.typo3.org
```

If the output looks like this, everything is fine:

**result**

```none
****    Welcome to Gerrit Code Review    ****

Hi <Name>, you have successfully connected over SSH.

Unfortunately, interactive shells are disabled.
To clone a hosted Git repository, use:

git clone ssh://<username>@review.typo3.org:29418/REPOSITORY_NAME.git

Connection to review.typo3.org closed.
```

Otherwise, your SSH client does not automatically choose the right private key file.
By default, SSH searches for the key in `~/.ssh/id_rsa` and `~/.ssh/id_dsa`.

You can manually specify the location using the `-i` parameter:

**shell command**

```bash
ssh -p 29418 -i <path-to-private-key> <username>@review.typo3.org
```

If this works, modify `~/.ssh/config` to define the file name for
connections to `review.typo3.org`:

**/.ssh/config**

```text
Host review.typo3.org
  User <username>
  IdentityFile ~/.ssh/<keyfile>
  Port 29418
```

Now the connection should work without having to specify any parameters as described above.

### Push: invalid committer {#push-invalid-committer}

**shell command**

```bash
git push -v origin HEAD:refs/for/main
```

**result**

```none
Pushing to ssh://<username>@review.typo3.org:29418/REPOSITORY_NAME.git
remote: ERROR:  https://review.typo3.org/#/settings/contact
remote:
To ssh://<username>@review.typo3.org:29418/REPOSITORY_NAME.git
! [remote rejected] HEAD -> refs/for/main (invalid committer)
error: failed to push some refs to 'ssh://<username>@review.typo3.org:29418/REPOSITORY_NAME.git'
```

This message simply means that your email address is not registered as a Web-Identity.
If this error happens, just go to the website that the error message suggests:
`https://review.typo3.org/#/settings/contact`. Register the email address you
use to push (button **Register New Email**) - even if it is already in the dropdown list.
Click on the link you receive via email. Be sure your are already logged in on `review.typo3.org`.
Otherwise the link does register the email address. Check if your new identity is registered
([https://review.typo3.org/#/settings/web-identities](https://review.typo3.org/#/settings/web-identities)). Pushing should work now.

### You are not a committer {#you-are-not-a-committer}

If you are trying to push changes and get this error message, then your
email address is probably not known to the system. Open **Settings > Identities**
in Gerrit and check the email address, which is connected to your account
(you can add more of them if needed). Additionally, check your settings in
Git with the following command:

**shell command**

```bash
git config user.email
```

If needed, change it with the following command:

**shell command**

```bash
git config --global user.email your-email@example.org
```

You may change the user/author of your last commit with:

**shell command**

```bash
git commit --amend
```

### Missing Change-Id in commit message {#missing-change-id-in-commit-message}

**result**

```none
! [remote rejected] HEAD -> refs/for/X/X (missing Change-Id in commit message)
```

If pushing a commit fails with this error message, you probably did not copy the [commit-hook](https://docs.typo3.org/permalink/t3contribute:git-setup-commit-msg-hook).
Make sure that the file `.git/hooks/commit-msg` exists and is executable.

Afterwards, you have to amend your commit to make it include the Change-Id:

**shell command**

```bash
git commit --amend
```

### Push: prohibited by gerrit {#push-prohibited-by-gerrit}

If Gerrit rejects your push with:

**result**

```none
[remote rejected] main -> main (prohibited by gerrit)
```

you are likely trying to do a simple `git push`. However, as Gerrit prohibits
directly pushing to the target branches, you have to use this lengthy command:

**shell command**

```bash
git push origin HEAD:refs/for/<release-branch>
```

For example:

**shell command**

```bash
git push origin HEAD:refs/for/main
```

### Push: Invalid Key Format {#push-invalid-key-format}

You get an error about an invalid key format. This might happen if you didn't save your key in the OpenSSH format but in a proprietary format like i.e. offered by PuTTY.

Review the sections about creating a valid public/private key pair on your operating system: [Setting up Gerrit (ssh)](https://docs.typo3.org/permalink/t3contribute:gerrit-ssh)

A valid private key in OpenSSH format starts with the following lines:

```none
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,0314A92F87D7FEDF
```

followed by about 25 lines of seemingly random signs.

### Pushing old Patch Set again (updating/rebasing) {#pushing-old-patch-set-again-updating-rebasing}

If you want to update an older patch set/version, so that it appears to be the
current one, you always need to get an updated commit hash. So you cannot just
checkout Patch Set 1 (or any other one) and perform a Git push. This would be
refused with a "no new changes" error message.

So you need to amend the commit using:

```bash
git commit --amend
```

and then, even without modifying the Commit Message, it gets a new SHA. This commit
can then be pushed again.

### Resolving Merge Conflicts in generated asset files {#resolving-merge-conflicts-in-generated-asset-files}

If you cherry pick a patch for review, you might encounter a merge conflict with a generated asset file
(JavaScript or CSS build files):

**result**

```none
Mergeconflict in typo3/sysext/backend/Resources/Public/Css/backend.css
```

To resolve the conflict, do not try to resolve conflicts in a huge 1-line file, but instead
re-create the assets using the following workflow:

**shell command**

```bash
# Perform re-build using the helper "runTests.sh"

# Make sure dependencies are up to date
./Build/Scripts/runTests.sh -s composerInstall

# Clean possibly previously build files
./Build/Scripts/runTests.sh -s clean

# Execute the build
./Build/Scripts/runTests.sh -s build

# Now add all conflicting files as resolved:
git add typo3/sysext/backend/Resources/Public/Css/backend.css

# Continue the cherry-pick process
git cherry-pick --continue
```

You will see the Commit Message again and you can now save it.
When you push this change, it will create a new Patchset - this is expected behavior.

### In which TYPO3 release was a patch merged into? {#troubleshooting-included-in}

See [where a patch was included](https://docs.typo3.org/permalink/t3contribute:cheatsheet-git-included-in) for
information on how to use the
**Included in** menu button to see, in which TYPO3 releases a patch
was merged into.
