git init
git add .
git commit
git commit --amend //修改最后一次的提交
git show
git log
配置当前用户提交的姓名,邮箱,编辑器
git config --global user.name "name"
git config --global user.mail youmail@example.com
git config --global core.editor vim
/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
当前项目的 git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。对应 git config --local 选项
注:每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
帮助,例如下
git log --help
man git log
对比
git diff //工作目录中当前文件和暂存区域快照之间的差异
git diff --cache //已经暂存起来的文件和上次提交时的快照之间的差异
git diff --staged //同上
查看日志
git log -p -2 //查看最近的两次更新,查看每次提交的内容差异
git log --stat //
git log --oneline --graph --decorate --all
git log --name-status
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 commit --amend
git reset HEAD newfile.name //取消已经暂存的文件
git checkout newfile.name //取消对文件的修改
git reset HEAD~2 //撤销add,commit操作,保留本地文件的修改
git reset [--mixed] HEAD^^ //同上,reset 不添加指令,默认的操作
git reset --hard <hash> //直接回退到hash值标定的那一个版本
git reset --soft <hash> //撤销commit 的操作,保留添加到暂存区的修改
补丁
git diff > ~/000.diff //利用git diff生成unix标准补丁
git format-patch <hash> -n //利用提交生成Git专用补丁文件,从hash值开始,生成n个补丁,默认生成到当前目录
git format-patch <hash> <hash> //两次hash值之间的所有提交都生成补丁
git format-patch -M origin/master //-M 选项允许 Git 检查是否有对文件重命名的提交
patch -p1 < ~/000.diff //打补丁,其中1指忽视几层(/),非事务性
patch -R p1 < ~/000.diff //撤销应用的补丁
git apply --stat new.patch //检查patch文件
git apply --check new.patch //检查能否应用成功
git apply ~/000.patch //打补丁,事务性补丁,仅仅是更新当前的文件,所以此命令不会自动生成提交对象,需要验证???
git am new.patch //应用format-patch生成的补丁
忽略某些文件
1. 在git仓库根目录下新建 .gitignore 文件
* 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
* 可以使用标准的 glob 模式匹配。
* 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
* 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
* glob 模式:
星号(*)匹配零个或多个任意字符;
[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
问号(?)只匹配一个任意字符;
如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)
远程仓库
git remote
git remote -v //查看远程仓库,并显示对应的克隆地址
git remote add [shortName] [URL] //添加远程仓库
git fetch [remote-name] //将远端的数据拉到本地仓库,需要手动合入;会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新
git pull // == git fetch ,git merge
git push orign master
git remote show remoteName //查看远程仓库的详细信息
git remote rename oldName newName //远程仓库重命名
git remote rm remoteName //远程仓库删除
小技巧:自动补全
使用 Bash shell,可以试试Git提供的自动补全脚本。将contrib/completion/git-completion.bash 文件复制到用户主目录下,并改为隐藏文件cp git-completion.bash ~/.git-completion.bash,并把下面一行内容(source ~/.git-completion.bash)添加到你的 .bashrc 文件中
使用时敲击两次tab键
小技巧:git 命令别名,例
git config --global alias.st status
git config --global alias.br branch
git config --global alias.last 'log -1 HEAD'
使用:git st
vi ~/.gitconfig
在 [alias] 下面一栏添加
alias.logl = log --oneline --decorate --graph
alias.logal = log --oneline --decorate --graph --all
分支
git branch newBranchName //新建分支
git checkout newBranchName //切换分支
git checkout -b newBranchName // ==新建并切换到分支
git branch -d branch //删除分支
git merge newBranch //当前分支合并newBranch ,并保留原有的index
git rebase master //衍合当前分支到master分支,从两个分支共同祖先的节点开始衍合,之前分支上的旧节点消失,生成新的节点
git rebase master server //把server分支衍合衍合到master,而不是从两个节点的共同祖先开始衍合
git rebase --onto master branchA branchB //取出branchB分支,找出A,B分支的共同祖先之后的变化,然后在master当前节点上衍合
PS:一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作