Git is a code Version Control System.

See also: "Oh shit, git!"

reset changes of specific file git checkout -- filename
undo all changes since last commit git reset --hard
merge multiple commits
git rebase -i
show remote repositories git remote

Sometimes you remember that you have to add a file to the commit you just made.

If you want to add a file to your commit after you already committed the changes:

git add <files>
git commit --amend

This lets you edit the commit description after you committed the changes.

If you don't want to change the commit message: git commit --amend --no-edit

git config "John Doe"
git config ""
# I want to make sure my master is in sync with the upstream master
git checkout -b merge-patches master
# first pull request
git pull --no-ff master
# second pull request
git pull --no-ff branch1
git remote add upstream path/to/repository.git
# get all refs and objects so your git knows what it can do
git fetch --all

You can merge foreign branches:

git merge upstream/master
[remote "origin"]
    # add this line
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

then execute:

# get refs
git fetch --all
# merge pull request with ID 999
git checkout pr/999


# change to branch to be added
git checkout master
# push it to the repo
git push -u origin master

Error: [remote rejected] master → master (branch is currently checked out)

# push to new branch on remote
git push origin master:refs/heads/upload
# on remote machine
git merge upload
git branch -d upload

Alternative: allow update of local branch

git config --local receive.denyCurrentBranch updateInstead


If you have two repositories which don't have a common origin, you can still merge them. If you try to do so via simple git pull, you may get the error fatal: refusing to merge unrelated histories. This is because git can't find a commit to base its merge on.

git remote add some-old-repo
git pull --allow-unrelated-histories some-old-repo master
git status -s


echo "*" >> ~/.gitignore
git add -f .gitignore
dotfile hinzufügen git add -f .dotfile

on the target peer

echo "*" >> ~/.gitignore
initialise git init
add remote git remote add hostname:~
fetch files git fetch –all
replace existing git reset –hard origin/master


Do a "git diff" on any file. What do you see?

The permissions have all changed!

git config core.filemode false

The whole file changed with weird ^ characters!

These are the line endings. Automatically adjust it to CRLF line endings with:

git config --global core.autocrlf true

Your permissions may be wrong. Check if any of the remote files in `.git` are not owned by the user you're connecting with. (source)

Store passwords or other information you don't want to accidentally leak somewhere else than in your git repository.

Use a secrets storage for this. You can use git-secret, blackbox or Hashicorp Vault for this.

  • meldGUI Merge
  • git-extras – tools which make working with git easier
  • BFG Repo-Cleaner – Removes large or troublesome blobs and files you don't want in your git history.

Ugly TK GUI for browsing Git repositories.

Show the history for a subfolder: gitk -- path/to/folder (has to be run in repo folder)

  • Last modified: 2020-12-20 13:48