第一部分 :提交修改
$git add . /*将当前目录中所有改动的代码添加到暂存区*/
$git commit -m "xxxxxx" /*将代码提交到本地仓库*/
$git push [remote-name] [branch-name]
# 推送数据到远程仓库
# PS:如果使用checkout --track 命令跟踪了远程分支,则可省略成git push
$git reset HEAD [filename]
#将不需要commit的文件移除缓存区
$git checkout --[file name]
# 将暂存区的特定文件替换成未更新的版本(即替换本地的修改)
# 使用git checkout . 可以恢复当前目录下所有的文件到未修改版本
$git commit -am "xxxxx"
# 直接将所有本地修改提交到本地代码仓库(省略了git add 命令)
$git log
#查看当前的所有commit的版本信息
PS:git log --stat 可以查看详细信息
$git pull [server-name] [branch-name]
#从服务器抓取代码到本地分支
$git push [server-name] [branch-name]
#将本地分支的更改上传到远程分支
第二部分: 分支操作
查看branch情况:
$ git branch /*查看本地branch*/
$ git branch -a /*查看所有(本地和remote)branch*/
$ git branch -v /*查看本地branch的最后一次提交信息*/
新建branch:
$ git checkout --track <remote-name/branch-name> /*基于remote branch创建*/
$ git branch <branch-name> /*基于当前代码创建*/
push branch到服务器:
$ git push remote-name branch-name /*新建的branch push以后才会存在于server上*/
切换/检出branch:
$ git checkout <branch-name>
删除branch:
$ git branch –d <branch-name> /*删除本地分支,不能删除当前分支*/
分支的查看:
$git reflog /* 查看分支提交的所有历史信息*/
分支的合并:
$ git merge <branch-name> /*合并branch 上的代码到当前分支,也可以合并分支中的某个特定版本,(commit的状态也会合并)*/
合并commit(非线性的好处):
$ git cherry-pick <commit-id > /*合并其他branch上的commit,但是只合并其他分支上的修改,但是不合并commit的状态*/
清除对tracked文件的修改:
$ git stash /*或者 $ git reset --hard */
清除un-tracked文件:
$ git clean –fdx
回退冲突的Merge(留到以后整合):
$ git pull
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard
查看分支的合并情况
$git branch --merged /* 查看已经合并到当前分支情况*/
$git branch --no-merged /*查看尚未合并到当前分支的分支有哪些*/
回退某个版本的commit(针对已经push的commit):
$ git revert <commit-id> /*回退commit-id版本的提交,会commit回退*/
$ git revert -n <commit-id> /*为了验证版本,回退修改后不commit*/
回退刚刚的commit(没有push的commit,已经push的会有冲突,慎用! )
$ git reset --soft HEAD^ /*回退一个版本,只修改HEAD标记,不修改文件*/
$ git reset --soft HEAD~5 /*回退最近5次commit,修改HEAD标记,不修改文件*/
$ git reset --hard HEAD^/*回退一个版本,将文件和git object都修改到前一版*/
特殊的分支合并方式(Git rebase)
$git rebase [主分支][特性分支] /*将主干分支的修改合并到特性分支中,而不保留特性分支的历史版本*/
第三部分:其他命令
git diff:
$ git diff /*比较目录文件和HEAD版本的差异(即查看修改内容)*/
$ git diff commit-id1..commit-id2 /*比较两个版本*/
git tag:
$ git tag <tag-name> /*基于当前代码创建名为tag-name的tag*/
$ git tag /*显示tag list*/
git mv:
$ git mv <src-path> <dst-path> /*重命名(移动)文件或目录*/
git fetch:
$ git fetch <remote-name> /*从服务器remote-name下载,但不merge进当前branch,也不影响当前文件内容*/
$ git fetch –all /*从所有remote服务器下载文件*/
查看对android源代码的修改:
$ repo status
更新android源代码:
$ repo sync
Android代码最近的修改:
$ repo forall -c git log --stat --after=‘date +%F --date=“-3 day”’ --all /*最近3天谁修改过android代码*/
查看android代码中包含的git project
$ repo list
第四部分:Git log 查看版本日志
-p 按补丁格式显示每个更新之间的差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
-(n) 仅显示最近的 n 条提交
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交。
$ git log –p -2
-p 选项展开显示每次提交的内容差异,用-2 则仅显示最近的两次更新
$ git log --stat
--stat,仅显示简要的增改行数统计
$ git log --pretty=oneline
--pretty 选项,可以指定使用完全不同于默认格式的方式展示提交历史
oneline 将每个提交放在一行显示,这在提交数很大时非常有用
$ git log --pretty=format:"%h - %an, %ar : %s"
选项 说明
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明
$git log --author="chen.jian" --after="2013-10-01" --before="2013-10-10" --shortstat
查看"chen.jian"在2013-10-01 到 2013-10-10 时间段内的修改,并显示摘要
第五部分:Git 与Svn 命令对比
Checkout
$ svn checkout <url>
$ git clone <url>
Update
$ svn update
$ git pull [remote-name] [branch-name]
Log
$ svn log
$ git log
Diff current modifications
$ svn diff [<path>]
$ git diff [<path>]
Commit
$ svn commit –m “message”
$ git commit –am “message”
Revert
$ svn revert <filename>
$ git checkout <filename>
Add
$ svn add <file or folder>
$ git add <file or folder>