Both sides previous revision
Previous revision
Next revision
|
Previous revision
|
software:git [2014/12/19 14:21] cyril [Local repository management] |
software:git [2016/01/28 22:02] (current) cyril [Editing commits] |
alias gitk='gitk --color-words' | alias gitk='gitk --color-words' |
</code> | </code> |
| |
| ==== General tips ==== |
| * ''<commit-hash>'' is the hash of a commit, but it can also be just the few first characters as long as it is not ambiguous. |
| |
| |
==== Local repository management ==== | ==== Local repository management ==== |
* % **''git commit -a''** : commit the changes of the working files to the repository (does a "git add" of all the working files before "git commit") | * % **''git commit -a''** : commit the changes of the working files to the repository (does a "git add" of all the working files before "git commit") |
* % **''git tag -a <tag-name> [-m <msg>]''** : add a tag | * % **''git tag -a <tag-name> [-m <msg>]''** : add a tag |
* % **''git reset --hard [<commit-hash>]''** : restore the working files to the latest commit, or given commit | * % **''git reset --hard [<commit-hash>]''** : restore the working files and index to the latest commit [or given commit] (everything after is lost) |
* % **''git revert <commit-hash>''** : revert the given commit (<commit> can be just the beginning of its hashcode) | * % **''git revert <commit-hash>''** : create a new commit that revertr the given commit |
* % **''git checkout <file>''** : restore a working file to the last commited version | * % **''git checkout <file>''** : restore a working file to the last commited version |
* % **''git checkout <commit-hash>''** : switch working files to the commit version, use **''git checkout master''** to go back to head | * % **''git checkout <commit-hash>''** : switch all working files to the given commit version, use **''git checkout master''** to go back to head |
| |
==== Branches ==== | ==== Branches ==== |
* % **''git branch -D <branch-name>''** : delete the given branch (force even if not fully merged, -d otherwise) | * % **''git branch -D <branch-name>''** : delete the given branch (force even if not fully merged, -d otherwise) |
* % **''git merge <branch-name>''** : merge current branch with the given branch | * % **''git merge <branch-name>''** : merge current branch with the given branch |
* % **''git rebase <branch-name>''** : rebase the branch on top of the given branch (if you have to resolve conflicts, do "''git add .''" and "''git rebase --continue''" once you resolved conflicts for a commit) | * % **''git rebase <branch-name>''** : rebase the current branch on top of the given branch (if you have to resolve conflicts, do "''git add .''" and "''git rebase --continue''" once you resolved conflicts for a commit) |
* % **''git cherry-pick <commit-hash>''** : apply the changes introduced by a given commit to the current branch | * % **''git cherry-pick <commit-hash>''** : apply the changes introduced by a given commit to the current branch (ie import the commit) |
| |
==== Collaborative repository management ==== | ==== Collaborative repository management ==== |
* % **''git clone <repo-addr>''** : copy the distant repository (<repo-addr> can be "http://<repo>" or "ssh://<user>@<repo>") | * % **''git clone <repo-addr>''** : copy the distant repository (<repo-addr> can be "http://<repo>" or "ssh://<user>@<repo>") |
* % **''git pull [<repo-addr>]''** : update from the distant repository (fetch and merge) | * % **''git pull [<repo-addr>]''** : update from the distant repository (fetch and merge) |
* % **''git pull --rebase [<repo-addr>]''** : instead of merging your pending commits with the new ones on master, rebase your pending commits on the top of master ; it creates a cleaner tree and avoids artificial "merged" commits. | * % **''git pull --rebase [<repo-addr>]''** : instead of merging your pending commits with the new ones on master, rebase your pending commits on the top of master (fetch and rebase) ; it creates a cleaner tree and avoids artificial "merged" commits. |
* % **''git stash ; git pull|merge|rebase ; git stash apply''**: to pull or merge or rebase when you have non-commited modifications ; store the modifs, pull or rebase, apply the modifs back | * % **''git stash ; git pull|merge|rebase ; git stash pop''**: to pull or merge or rebase when you have non-commited modifications ; store the modifs, pull or rebase, apply the modifs back. |
* % **''git push <repo-addr>''** : send to the distant repository (needs ssh clone and write permissions) | * % **''git push <repo-addr>''** : send to the distant repository (needs ssh clone and write permissions) |
* % **''git push origin <local-branch>[:<dist-branch>]''** : push a local branch into a new distant branch | * % **''git push origin <local-branch>[:<dist-branch>]''** : push a local branch into a new distant branch |
</code> | </code> |
| |
| Change author or date: use ''rebase -i'', chose "edit", and commit with: |
| <code> |
| git commit --amend --author "Name <email-address>" --date "$(date -R)" |
| </code> |
| |
| To split a commit: use ''rebase -i'', chose "edit", and reset the index to the commit before, and commit: |
| <code> |
| git reset --mixed @~ |
| git add -p . |
| git commit |
| </code> |
==== Archive generation ==== | ==== Archive generation ==== |
| |
| |
[[http://www.dmo.ca/blog/20080307124544/]] | [[http://www.dmo.ca/blog/20080307124544/]] |
| |
| ==== Recovery ==== |
| |
| For finding a lost commit you can use "git reflog". |
| |
| For finding a lost stash (eg "git stash drop") or file (eg "git rm"), you can try "git fsck --full", and then use "git show" with the hash to see the content of the objects. |
| |
| [[https://github.com/blog/2019-how-to-undo-almost-anything-with-git]] |