Monday, April 11, 2016


get latest code and merge
git pull

get the latest code, require manually merge
this is better than pull, since we can check diff and decide to merge or not
git fetch
git log -p master..origin/master
git merge origin/master

git config --global "Yushan Lu"
git config --global ""

Create/Init a repository
git init

Add file
git add hello.txt

git commit -m "Commit1"

See log:
git status
git diff
git log

Change commit message
git commit --amend -m "Changes commit message"

Show remote repositories
git remote

Switch to branch
checkout master

See local branches
git branch

See local and remote branches
git branch -a

New branch
git branch newMyBranch

git stash

Push Conflict

We will get conflict error when the remote branch pushed by others
git push
So we can first pull
git pull origin master
Then use mergetool, choose meld or any editor to manually merge codes.
git mergetool
Then commit again, and push
git commit -m "Merged codes"
git push

Git Rebase has two features
  • Combine multiple commits to one
    We can have multiple commits, but changes for one feature should stay in one commit, so the history is clean

    See log:   git log
    Merge last 3 commits:      git rebase -i HEAD~3
          Options:  pick|reword|edit|squash|fixup|exec|
                          or directly delete that line means cancel this commit
    Then :  git rebase (--continue | --abort | --skip | --amend)

    Do not commit again during this procedure, makes life easier.
  • Add one branch as a patch to another branch
    Different to merge, this will make cleaner commits history and keep change like within one route

    rebase the master: git rebase master

  • commit
    commit ...

    rebase commits for same feature(if necessary)

    stash un-commited changes (if necessary)
    git rebase master
    git push


Patch is good to use for large group of developers.
Developer generate a patch, then send the patch to project manager, or other developers to review.
Manager can apply patch.
If patch rejected, developer rebase the change and fetch to latest code, then generate the patch again.
Manager then apply the patch finally.

Suggest to use format-patch instead of git diff

Create one/more patch, based on commits
git format-patch origin/master
generated three patches

Apply Patch

apply patch
git am 0001-Add-A.patch
git am --ignore-space-change --ignore-whitespace 0001-Add-A.patch

git add .
git commit -m "Apply patch"

Create a repository

mkdir mmm

cd mmm

git init

touch test.txt

git add .

git commit -m "create test.txt"

Clone from a repository, create a new branch

cd ..

mkdir m1

cd m1

git clone ~/servergit/mmm .

git branch m1

git checkout m1

Change the file

echo "fix from m1" >> test.txt

git add .

git commit -a -m "fix1"

Create a patch for master branch

git format-patch -m master

Apply patch on master branch

git checkout master

git am 0001-fix1.patch

git add .

git commit -m "apply fix"

No comments:

Post a Comment