Git,GitHub常用命令介绍

Git给项目打标签

git tag -a v1.0 -m 'version 1.0'        #给项目打v1.0标签
git push --tags          #把标签推到github中
git tag checkout v1.0     #把项目检出到某个tag
git checkout master    #切换到master 分支
git tag -l                    #列出所有的tag
git tag -d v1.0            #删除某个tag

Git generate ssh key&add config params

ssh-keygen -t rsa -C "tang.jilong@139.com"
ssh -T git@github.com
git config --global user.name "tim.tang"
git config --global user.email "tang.jilong@139.com"

git config --global color.branch auto
git config --global color.diff auto
git config --global color.interactive auto
git config --global color.status auto

cat ~/.gitconfig

Git查看配置

git config -l             #查看所有配置

Git branch操作

git branch                 #查看分支
git branch -r              #查看远程分支
git branch -d tmp        #删除本地tmp分支
git branch everyday_dev  #在本地创建everyday_dev分支
git push origin everyday_dev  #把本地分支提交到github.
git push origin :everyday_dev   #删除github上的远程分支

Git diff操作

git diff [<path>...]  #这个命令最常用,在每次add进入index前会运行这个命令,查看即将add进入index时所做的内容修改,即working directory和index的差异。
git diff --cached [<path>...]   #这个命令初学者不太常用,却非常有用,它表示查看已经add进入index但是尚未commit的内容同最后一次commit时的内容的差异。即index和git directory的差异。
git diff <commit> <commit> [<path>...]   #这个命令用来比较git directory中任意两个<commit>之间的差别,如果想比较任意一个<commit>和最新版的差别,把其中一个<commit>换成HEAD即可
git diff --stat     #统计一下有哪些文件被改动,有多少行被改动

Git reset使用

git reset [--hard|soft|mixed|merge|keep] [<commit>或HEAD] #将当前的分支重设(reset)到指定的<commit>或者HEAD。
--hard:重设(reset) index和working directory,自从<commit>以来在working directory中的任何改变都被丢弃,并把HEAD指向<commit>。
--soft:index和working directory中的内容不作任何改变,仅仅把HEAD指向<commit>。这个模式的效果是,执行完毕后,自从<commit>以来的所有改变都会显示在git status的"Changes to be committed"中。
--mixed:仅reset index,但是不reset working directory。这个模式是默认模式,即当不显示告知git reset模式时,会使用mixed模式。这个模式的效果是,working directory中文件的修改都会被保留,不会丢弃,但是也不会被标记成"Changes to be committed",但是会打出什么还未被更新的报告。

$git reset --hard <commit-number> #将分支回滚到某个版本
$git push origin master -f

Git fetch

git fetch origin master:tmp
git diff master..tmp
git merge tmp
功能同上:
git fetch origin master
git log -p master..origin/master
git merge origin/master

Git blame

git blame filename    #查看当前文件每行代码的修改者

Git archive

git archive --format zip -o $(git log --pretty=format:"%h" -1).zip HEAD #打包代码

Git meger and rebase

git merge <branch>               # 将branch分支合并到当前分支
git merge origin/master --no-ff  # 不要Fast-Foward合并,这样可以生成merge提交
git rebase master <branch>       # 将master rebase到branch,相当于:
git co <branch> && git rebase master && git co master && git merge <branch>

Git patch

git diff > ../sync.patch         # 生成补丁
git apply ../sync.patch          # 打补丁
git apply --check ../sync.patch  # 测试补丁能否成功

Git stash

git stash                        # 暂存
git stash --patch                # 选择需要暂存的文件
git stash list                   # 列所有stash
git stash apply                  # 恢复暂存的内容
git stash drop                   # 删除暂存区

Git remote repository management

git remote -v                     # 查看远程服务器地址和仓库名称
git remote show origin            # 查看远程服务器仓库状态
git remote add origin git@github:tim-tang/tim-tang.github.com.git         # 添加远程仓库地址
git remote set-url origin git@github.com:tim-tang/tim-tang.github.com.git # 修改远程仓库地质
git remote rm <repository>        # 删除远程仓库
git remote set-head origin master # 设置远程仓库的HEAD指向master分支

Branching Model For Hotfixes

git checkout -b bug-xxx origin/bug-xxx #create a branch for this specific hotfix based on the prod branch and select bug-xxx branch as the current one.
git commit -m "bug-xxx blah blah" #commit the changes.
git checkout prod  #select prod branch as the current one.
git merge bug-xxx  #merge with bug-xxx branch.
git push origin prod  #push fixes to prod.
git checkout master  #select develop branch as the current one.
git merge bug-xxx    #merge with bug-xxx branch.
git push origin master #push fixes to master.

Hotfixes branching model

502 Words 18 May 2012 Suzhou, China