Check out my first novel, midnight's simulacra!
Git: Difference between revisions
No edit summary |
|||
(12 intermediate revisions by the same user not shown) | |||
Line 39: | Line 39: | ||
===Prune remote branches=== | ===Prune remote branches=== | ||
<tt>git remote prune origin</tt> | <tt>git remote prune origin</tt> | ||
This can be made automatic with <tt>git config remote.origin.prune true</tt> since git 1.8.5. | |||
===Hard sync to upstream=== | |||
Warning: this will throw away even committed local changes! Assuming remote <tt>upstream</tt> and branch <tt>master</tt>: | |||
<tt>git reset --hard upstream/master</tt> | |||
then, to force your own fork to match: | |||
<tt>git push origin master --force</tt> | |||
Congratulations! You've just thrown away any local work. | |||
===Remove local+remote tag=== | |||
* <tt>git tag -d TAG</tt> | |||
* <tt>git push --delete origin TAG</tt> | |||
===Rename local+remote branch=== | |||
Remote branches cannot be renamed in a single step. Instead, | |||
* Check out the remote branch if it is not checked out | |||
* Rename the local branch with <tt>git branch -m newname</tt> | |||
* Delete the remote branch with <tt>git push origin ––delete oldname</tt> | |||
* Re-add and reset the remote branch with <tt>git push origin –u newname</tt> | |||
===Find commit corresponding to tag=== | |||
* <tt>git rev-list -n 1 TAG</tt> | |||
===List all commits between two hashes Ce and Cb=== | |||
* <tt>git rev-list Ce..Cb</tt> | |||
===Update local list of remote branches=== | |||
* <tt>git remote update origin --prune</tt> | |||
===Change base branch BBase of branch Bbranch to BNewbase=== | |||
* <tt>git rebase --onto BNewbase BBase Bbranch</tt> | |||
===Show changes in commit C, even if it's a merge commit=== | |||
* <tt>git show --diff-merges=on C</tt> | |||
==See also== | |||
* [[GitHub]] | |||
==Links== | ==Links== | ||
* Tv's "[http://eagain.net/articles/git-for-computer-scientists/ Git for Computer Scientists]" | * Tv's "[http://eagain.net/articles/git-for-computer-scientists/ Git for Computer Scientists]" |
Latest revision as of 23:35, 28 January 2023
Here's a good crash course for subversion users.
Hosting
- GitHub provides pretty reasonable git hosting services; open source projects eat free.
- github-trac is a trac extension for working with GitHub
- Remote repacks/compressions can consume a great deal of memory. To cap the remote packing at, say, 2G, enter the remote repository and run:
git config pack.windowMemory 1000m git config pack.packSizeLimit 2000m
Configuration
Dump your user configuration with git config -l:
[recombinator](129) $ git config -l user.name=Nick Black user.email=dank@qemfd.net github.user=dankamongmen [recombinator](0) $
Dump the system configuration, if one exists, via git config --system -l:
[recombinator](129) $ git config --system -l color.diff=auto color.status=auto color.branch=auto [recombinator](0) $
Subversion equivs
goal | subversion | git |
---|---|---|
Add an external repository repo at point dir/path | svn propedit svn:externals dir, and add repo path | git submodule add repo dir/path (there's a Submodule Tutorial) |
Recipes
Create bare repo from existing files
We have existing, untracked files at workpath. We want to initialize a (possibly remote) bare repository repo with the contents of workpath.
- In repo/, run git init --bare
- In workpath/, run git init
- In workpath/, run git remote add origin repo
- In workpath/, run git add .
- In workpath/, run git push
Prune remote branches
git remote prune origin
This can be made automatic with git config remote.origin.prune true since git 1.8.5.
Hard sync to upstream
Warning: this will throw away even committed local changes! Assuming remote upstream and branch master:
git reset --hard upstream/master
then, to force your own fork to match:
git push origin master --force
Congratulations! You've just thrown away any local work.
Remove local+remote tag
- git tag -d TAG
- git push --delete origin TAG
Rename local+remote branch
Remote branches cannot be renamed in a single step. Instead,
- Check out the remote branch if it is not checked out
- Rename the local branch with git branch -m newname
- Delete the remote branch with git push origin ––delete oldname
- Re-add and reset the remote branch with git push origin –u newname
Find commit corresponding to tag
- git rev-list -n 1 TAG
List all commits between two hashes Ce and Cb
- git rev-list Ce..Cb
Update local list of remote branches
- git remote update origin --prune
Change base branch BBase of branch Bbranch to BNewbase
- git rebase --onto BNewbase BBase Bbranch
Show changes in commit C, even if it's a merge commit
- git show --diff-merges=on C
See also
Links
- Tv's "Git for Computer Scientists"
- tpope's "Note About Git Commit Messages" (2008-04-19)
- GitWiki's GitTips