This post is going to be a collection of little Git recipes. Many of them are collected from somewhere else, but others are more specific to the code management processes
Configure git for certificate-based credentials for multiple logins
Generate certificateI was able to get this working by following the instructions here. However, I also needed to add some commands to my "~/.basrc" file to provide my SSH credentials to the git/bash shell window. Each ssh-add command adds one certificate to the identity store.
#! /bin/bash eval `ssh-agent -s` ssh-add ~/.ssh/github_rsa ssh-add ~/.ssh/github_admin_rsa
Make the local copy an exact copy of a named remote and branch
git reset remote/branch --hard git clean -fd
Update the local copy to have all the changes in a named remote and branch
git pull -X ours --rebase remote branch
Merge changes into the local copy from named remote and branch
git merge remote/branch
Merge a remote pull request locally (after a clean)
git fetch remote git merge remote/pr/123
Push to a remote
git push remote branch
Create a new local branch
git checkout -b newBranch
Copy a remote branch locally
git checkout -b localBranch remote/branch
Apply a tag or overwrite an existing one.
A tag works like a branch in many respects, so you can do a "git checkout tagName" to get the tagged version.
git tag tagName -f
Update a tag with a cherry-picked commit
git checkout my_tag git cherry-pick commit_123 git tag -f my_tag git push repository --tags
Master and upstream repositories
For these commands, if you have supplied the credentials using the certificate method listed above, the URL will include the alias name contained in the "~/.ssh/config" file. I.e. use git@github-user:GithubUser/repo.git instead of "https://github.com/GithubUser/repo.git". Your config file should look something like this:
#~/.ssh/config ForwardAgent yes Host github-user HostName github.com User git IdentityFile ~/.ssh/github_user_rsa Host github-admin HostName github.com User git IdentityFile ~/.ssh/github_admin_rsa
and your "git remote -v" command should yield something like this:
user git@github-user:Organization/repository.git (fetch) user git@github-user:Organization/repository.git (push) admin git@github-admin:Organization/repository.git (fetch) admin git@github-admin:Organization/repository.git (push)
by using the "user" and "admin" repository aliases, you work with the same repository from different accounts!
Clone a remote repository locally
git clone https://github.com/.../somerepo.git
Add a new upstream repository to a local
git remote add upstreamBranchName https://github.com/.../repo.git