133 lines
4.3 KiB
Plaintext
133 lines
4.3 KiB
Plaintext
#########################################################
|
|
# My personal GIT tips
|
|
#########################################################
|
|
|
|
(1) Squash several commit into one (consolitation)
|
|
# Note:
|
|
# Between HEAD and 3 is tilde sign
|
|
$ git rebase -i HEAD~3
|
|
# step 1: In pop-up editor (emacs), "pick" the earliest one and squash all the rest.
|
|
# step 2: In second pop-up editor, edit the commit message and save, exit.
|
|
|
|
|
|
(2) Pull the latest changes (sometime it is a fix/required) and put it under
|
|
# your working commit
|
|
$ git pull --rebase
|
|
# if there are any conflicts, you need edit the conflicted files manually. then
|
|
$ git add <conflict and edited files>
|
|
$ git rebase --continue
|
|
|
|
# Note: Don't do git commit between "git add" and "git rebase --continue",
|
|
if you did, then you need git rebase --abort and come over.
|
|
|
|
# Another way (?) from Su Hui
|
|
$ git fetch
|
|
$ git rebase -i origin/nextgenv2
|
|
# -i ?, the following works:
|
|
$ git rebase origin/nextgenv2
|
|
# if there are any conflicts, you need edit the conflicted files manually. Sometimes
|
|
# need to diff against change in another repos or blame the conflict file to see the
|
|
# change.
|
|
$ git add <conflict and edited file>
|
|
$ git rebase --continue
|
|
|
|
|
|
(3) Create a branch from a older commit
|
|
# Create a branch from the top and specify the targeted remote branch
|
|
# Typically I need to create a branch for new code construction
|
|
$ git checkout -b <branch_name> <origin/nextgenv2>
|
|
|
|
# Typically I need to create a branch for performance test base (seat)
|
|
$ git checkout -b <branch_name> <commit>
|
|
|
|
|
|
(4) Restore the local top to <commit>
|
|
# Delete the current top commit
|
|
$ git reset --hard <commit>
|
|
|
|
# Delete the current failed merge/modification
|
|
$ git reset --hard
|
|
|
|
|
|
(5) Diff a commit against its parent
|
|
$ git diff <commit>^!
|
|
|
|
# Diff HEAD agaist its parent
|
|
$ git diff HEAD^!
|
|
|
|
|
|
(6) Restore one file from previous commit and fix latest commit
|
|
$ git checkout <commit> <filename>
|
|
$ git commit --amend
|
|
|
|
|
|
(7) Merge a commit from master branch to another branch
|
|
$ git checkout <branch>
|
|
# use cherry pick. Please make sure the <branch> is clean and latest
|
|
$ git fetch https://chromium.googlesource.com/webm/libvpx refs/changes/18/336818/3 && git cherry-pick FETCH_HEAD
|
|
# if there is no conflict, it automatically merge (if successfull) with local. And
|
|
# the commit appears if do "git log"
|
|
# if there is conflict, need to merge manually and $ git commit -a --amend (i guess)
|
|
|
|
|
|
(8) Cherry pick
|
|
# This way we add an extra line (reference to the picked commit)
|
|
$ git cherry-pick -x <commit hash>
|
|
|
|
|
|
(9) Sandbox push
|
|
First ask Admin to create a sandbox (remote branch) for you.
|
|
# Work in local from git init, git commit ....
|
|
# Initial push:
|
|
# Here we use "head" instead of "for", "for" is for review board. Please note:
|
|
# we use -f
|
|
$ git push -f https://chromium-review.googlesource.com/webm/libvpx HEAD:refs/heads/sandbox/luoyi@google.com/convolve
|
|
$ git checkout -b sandbox/luoyi@google.com/convolve
|
|
|
|
# check it out:
|
|
$ git checkout -b codestore origin/sandbox/luoyi@google.com/convolve
|
|
|
|
# Push
|
|
# Run git push, then the error message would show you two ways. The first way works. See following:
|
|
$ git push origin HEAD:sandbox/luoyi@google.com/convolve
|
|
|
|
(10) Revert a change
|
|
$ git checkout <commit hash> <filename>
|
|
Revert a file at <commit hash> to index
|
|
|
|
(11) Diff current staged file (ready to commit) against a previous commit version
|
|
$ git diff --cached <commit hash> <path/file>
|
|
|
|
(12) Setup a branch for continuing work
|
|
# On a branch named: branch_name1,
|
|
$ git checkout -b <branch_name2>
|
|
$ git branch -u origin/nextgenv2
|
|
# latest commit may not be merged yet. So after local check-in, can we do
|
|
cherry-pick later from branch_name2 to branch_name1?
|
|
|
|
(13) Generate and Apply a patch
|
|
$ git diff --no-ext-diff > my.diff
|
|
$ git apply my.diff
|
|
|
|
(14) git log --pretty=format:"%h %an %cd %s" --date=short
|
|
git log --pretty=fuller
|
|
|
|
(15) git rebase -i origin/master
|
|
Remove current unwanted base patch
|
|
Pull in latest patches
|
|
|
|
########################################################
|
|
# Trivial tips now
|
|
########################################################
|
|
(1) Push for a review
|
|
$ git push https://chromium-review.googlesource.com/webm/libvpx HEAD:refs/for/nextgenv2
|
|
or
|
|
$ review_push.sh
|
|
|
|
(2) Show git remote repo
|
|
$ git remote show origin
|
|
|
|
(3) Check codebase's tag information
|
|
$ git tag
|
|
$ git rev-list -n1 v0.1.0
|