Git Cheat Sheet
This is a short list of commands. If you are not familiar with the workflow yet, make sure you follow the link at the beginning of each section and read the detailed description.
The following commands assume you are in the working directory of the TYPO3 core repository.
git clone
Clone TYPO3 CMS Git repository into current directory:
git clone git@github.com:typo3/typo3 .
Setup
For detailed setup instructions, please see: Git Setup
Migrations
Migrate master => main
If you are using an older installation with the master branch you can switch like this from master to main:
# Make sure that git pull loads from the "main" branch
git branch --set-upstream-to origin/main
# Rename your current "master" branch locally to "main" to match TYPO3's naming scheme
git branch -m master main
Please also adapt your commit message template (if configured) to use "main" instead of "master".
- TYPO3 Core Development to Change Branch Name (November 28, 2021)
Migrate to GitHub
If you are working with an older t3coredev installation and are not using the GitHub URL yet, you can switch like this:
# set remote url for "origin"
git remote set-url origin https://github.com/typo3/typo3.git
# set push URL to gerrit (this has not changed)
git config remote.origin.pushurl "ssh://<your-username>@review.typo3.org:29418/Packages/TYPO3.CMS.git"
- Renaming the TYPO3 GitHub Repository. (July 6, 2021)
Workflow - common commands
For details see Create a Patch
Reset repo to last remote commit in (remote) main branch:
git reset --hard origin/main && git pull origin main
Stage and commit all changes:
git commit -a
Is the same as:
git add .
git commit
Stage and commit all changes to already existing commit:
git commit -a --amend
Push changes to remote main branch on gerrit (default method):
git push
This assumes, you have correctly configured your remote as described in Setting up Your Remote. If not, you must explicitly push using the refs/for namespace:
git push origin HEAD:refs/for/main
Note
Pushing to refs/
is deprecated, we now push to refs/
.
Check out Upload a new Patch Set on how to specify a distinct
small message alongsite your patch set.
Workflow - work in progress
In case you want to push a "Work in progress", use the following instead:
git push origin HEAD:refs/for/main%wip
You can also configure Gerrit to always mark your pushes as WIP. In order to do this head over to https://review.typo3.org/settings/ and configure "Set new changes" to "work in progress" by default".
See: https://gerrit-review.googlesource.com/Documentation/user-upload.html#wip
Workflow -other branches
Show all branches:
git branch -a
Checkout 13.4 branch:
git checkout 13.4
Checkout 12.4 branch:
git checkout 12.4
Important
Pushing to a branch other than main only makes sense if the bug only exists on that branch and does not exist on main. Backporting of a fix to a branch is done by the core team member who merges the original fix to the main branch.
Long story short: In most cases, push to main. The rest is being taken care of by core team members!
Push 13.4 branch:
git push origin HEAD:refs/for/13.4
Push 12.4 branch:
git push origin HEAD:refs/for/12.4
Workflow - commit msg
Details: Commit Message rules for TYPO3 CMS
Example commit message for a bugfix:
[BUGFIX] Subject line
Description
Resolves: #12345
Releases: main, 10.4
Other keywords:
[BUGFIX]
[FEATURE]
[DOCS]
[TASK]
[!!!][FEATURE]
[WIP][TASK]
- subject < 52 chars (if possible, otherwise <= 72)
- other lines <= 72 chars
- hyperlinks with > 72 chars are allowed when required (Inserting links / long lines)
Workflow - Undoing / fixing things
Throw away all changes since last commit:
git reset HEAD --hard
Unstage a file (remove file from index, but keep in working dir):
git reset <path>
Change author for last commit:
git commit --amend --author "Some Name <some@email>"
Squash last 2 commits:
git rebase -i HEAD~2
In the editor, replace 'pick' with 'squash' in the line describing the latest commit
This is very handy, in case you accidentally created a new commit
instead of adding to an existing commit (with git commit --
). This way,
you can merge the last 2 commits and the commit messages.
References
See also these not TYPO3 specific cheat sheets for git if you are not very familiar with git:
- cheat sheet for git (in several languages)
- "git - the simple guide" by Roger Dudler
- "Oh, shit, git!" by Katie Sylor-Miller is basically a cheat sheet for Git, but focuses mostly on fixing things that went wrong.
To learn more about the internal working of Git, check out these resources: