Git
Clone specific tag/release
git clone --depth 1 --branch <tag_name> <repo_url>
Clone specific subfolder
git clone --filter=blob:none --sparse %your-git-repo-url%
cd %git-repo-folder%
git sparse-checkout add %subdirectory-to-be-cloned%
cd %subdirectory-to-be-cloned%
Remotes
# Push to multiple remotes at once
git remote add all git@github.com:[username]/[repository]
git remote set-url --add --push all git@github.com:[username]/[repository]
git remote set-url --add --push all git@bitbucket.org:[username]/[repository]
git push all
Tagging
git tag -a -m "tagging version 1.11-7" 1.11-7
git push --tags
git tag -d 1.11-7 # [deleting a tag]
git push origin :refs/tags/1.11-7 # [remove tag from origin that I'd removed locally]
git push --delete origin 1.11-7 # [another way to remove tag from origin]
git tag -a tag_label 9fceb02 -m "Message here" # [tag an older commit]
git tag -l # [list tags]
Branching and merging
git branch # [to see what branches there are]
git branch blah # [to create the 'blah' branch]
git checkout blah # [to switch to the 'blah' branch
git checkout master; git merge blah # [merge blah into master]
git push -d <remote_name> <branchname> # [to delete a branch local and remote]
git branch -d <branchname>
Going back
git reset --hard # [throw all changes away]
git checkout myfile.txt # [throw away changes to myfile.txt]
git commit --amend # [revise the last commit message]
git reset --hard HEAD~1 # relative roll-back, followed by push --force
git reset --hard <commit-hash> # targeted roll-back, followed by push --force
Deleting a file or folder from git but keep local
git rm --cached mylogfile.log
git rm --cached -r mydirectory
Temporarily ignoring files
https://coderwall.com/p/gjp15g/git-temporarily-ignoring-files
git update-index --assume-unchanged <file_to_ignore>
git ls-files -v | grep ^h
git update-index --no-assume-unchanged <ignored_file>
Fix folder capitalization
git mv Mypath mypath_temp
git mv mypath_temp myPath
List number of contributor commits
git shortlog -sn
Zip all git-tracked files
git archive --format zip --output archive.zip main
Create an empty dummy commit
git commit --allow-empty -m "Trigger Build"
Submodules
git submodule add https://github.com/some_user/some_repo
Debugging
GIT_SSH_COMMAND="ssh -vvv" git clone <REPO_SSH>
Github stuff
Searching github:
https://github.com/search?utf8=%E2%9C%93&q=session_info+filename%3A.travis.yml
Create releases for old commits:
There seems to be support for a “target” URL query. Simply click “new release” and add
?target=<hash>
to the URL.
https://github.community/t/create-releases-for-old-commits/872/10
Misc
A couple of things from Software Carpentry:
-
to get out of detached HEAD state, use
git checkout master
-
to see the files you’re ignoring, use
git status --ignored