本篇是根据ProGit整理的常用Git命令,注释比较简单,如需详细了解Git,请阅读ProGit。
- 状态检查
git status (查看git状态报告)
git status -s (以紧凑的格式输出git状态)
git diff (查看修改后还没暂存起来的内容)
git diff --cached (查看已暂存的将要添加到下次提交里的内容)
git diff branchA branchB (查看具体的不同内容,branchB多提交哪些内容)
git difftool (使用图形化的界面查看文件差异)
git reflog (查看命令历史)
git remote (查看已配置的远程仓库名字 -v显示对应的URL)
git remote show <remote-name> (查看远程仓库的具体信息)
git branch (查看当前所有的分支)
git branch -v (查看每个分支的最后一次提交)
git branch --no-merged (查看所有未合并到当前分支的分支 --merged是已合并的分支)
- 标签管理
git tag (以字母顺序列出已有tag)
git tag -a <version> -m "message" (创建一个附注标签,推荐)
git tag -a <version> -m "message" <commitId> (后期打标签)
git tag <version> (创建一个轻量标签)
git tag -d <version> (删除标签)
git push origin <tagName> (推送标签到远程仓库,因为默认不会推送标签到远程仓库,需显示推送)
git push origin --tags (将所有不在远程仓库的标签全部推送上去)
- 远端与本地的交互
//使用Git管理项目
git init (在现有目录中初始化仓库,对现有项目进行管理)
git clone https://github.GreenBeanD/project [newName] (克隆一个Git仓库,[]内容为可选,意为重命名仓库的名字)
git remote add <name> <url> (添加一个新的远程仓库并指定引用名称例如origin)
git fetch <remote-name> (从远程仓库获取数据,不会自动合并)
git pull (从远程仓库获取数据,自动合并到当前所在分支,这是在只有一个追踪分支时的省略参数指令)
git pull <remote-name> <remoteBranch-name>:<localBranch-Name> (将远程仓库的指定分支合并到本地的指定分支,不带冒号后的内容意味合并到当前分支)
//添加远程仓库分支到本地
//git pull默认不会将远程仓库的所有分支同步到本地,所以我们需要手动的添加一些需要的远程仓库的分支,主要过程是:
//在本地新建一个分支并将此与远程分支关联
git branch -r //查看远程分支,假设我们要添加远程仓库的dev分支`origin/dev`
git branch dev origin/dev //新建分支并关联,这里最好保持本地分支和远程分支名称一致,可以避免pull的时候需要指定本地分支的名字
git pull origin dev //将远程分支dev数据同步到本地dev分支
// 本地分支已存在想直接关联线上的分支
git fetch origin 分支名(然后就可以push到线上了)
git push <remote-name> <branch-name> (将本地分支推到远程主分支)
git remote rename <oldname> <newname> (重命名远程仓库)
git remote rm <remote-name> (删除远程仓库)
- 提交与修改
//使用Git提交
git add <file> (开始跟踪文件或将已跟踪文件放入暂存区,添加当前全部文件: git add .)
git commit -m "提交" (提交修改)
git commit -a -m "提交" (跳过add步骤直接提交,只会自动添加跟踪过但未暂存的文件,未跟踪的文件不会自动跟踪)
//移除文件
git rm <file> (从工作目录中删除文件,文件真的就没有了哦)
git rm -f <file> (对于之前修改过并已放入暂存区域的文件,必须强制删除)
git rm --cached <file> (从仓库中移除,但在工作目录中保留,换句话说移除跟踪,文件保留)
//文件重命名
git mv <oldName> <NewName>
//撤销操作
git commit --amend (重新提交,所以在此操作之前应该补全漏掉的操作)
git reset <file> (取消文件暂存操作)(reset操作可用于版本回退)
git reset --hard (取消某个提交之后的所有修改)
--hard 表示取消某个提交之后的所有修改并且不保留被修改的部分
--mixed 表示取消某个提交之后的所有修改但是保留被修改的部分,reset默认是mixed
git checkout -- <file> (撤销指定文件当前的所有修改到暂存状态或最初状态,视文件为已暂存还是未暂存决定)
//不得不说的reset和revert
//git revert 是生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留
//git reset 是回到某次提交,提交及之前的commit都会被保留,但是此次之后的修改都会被退回到暂存区 --hard是直接放弃所有修改,不会保留
git revert commitId
- 分支模型部分
git branch <branchName> (创建新分支)
git checkout <branchName> (切换到指定分支)
git checkout -b <branchName> (创建并切换到指定分支)
git branch -d <branchName> (删除指定分支 -D强制删除)
git merge <branchName> (将指定分支合并到当前分支)
git rebase <branchName> (将指定分支以rebase的方式合并到当前分支,这种方式合并后的分支是一条直线,强迫症患者的福音)
git mergetool (使用图形化工具来解决冲突)
简单说明下rebase:
上边两图分表代表了rebase之前和之后的分支路线,可见,当前分支topic分支中的修改被依次添加到master分支新增内容之后,这样合并后的分支不会分叉。
如果在rebase过程中发生了冲突,在命令行中会提示在哪一个文件中发生了冲突,到对应文件中修改之后执行git add 然后继续rebase --continue即可。
- Log部分
git log (按提交时间列出所有更新)
git log -p -2 (-p用来显示每次提交的内容差异 -2用来限定显示数量,数字可以任意填写,当然数量这个参数也可不指定,Git会自动分页)
git log --stat (查看每次提交的简略统计信息,如修改数量 --shortstat 简短的显示)
git log --name-only (仅在提交信息后显示已修改的文件清单)
git log --name-status (显示新增、修改、删除的文件清单)
git log --graph (带有分支合并历史的展示方式)
git log --pretty=oneline (将每个提交放在一行显示,除了online还有short、full、fuller等)
git log --pretty=format:"%h - %s" (按指定格式输出记录format后可以自定义任意的输出格式)
` %H (提交对象(commit)的完整哈希字串) %h (提交对象的简短哈希字串)
` %T (树对象(tree)的完整哈希字串) %t (树对象的简短哈希字串)
` %P (父对象(parent)的完整哈希字串) %p (父对象的简短哈希字串)
` %an (作者(author)的名字) %ae (作者的电子邮件地址)
` %ad (作者修订日期(可以用 -date= 选项定制格式)) %ar (作者修订日期,按多久以前的方式显示)
` %cn (提交者(committer)的名字) %ce (提交者的电子邮件地址)
` %cd (提交日期(可以用 -date= 选项定制格式)) %cr (提交日期,按多久以前的方式显示)
` %s (提交说明)
git log --left-right branch1...branch2 (只查看不同的提交,该指令会列出两个分支不同的提交,branchA的提交用<标识,branchB的提交用>标识)
例如:commit > 9f9b4f383c521b3598c008c1a0 (HEAD -> branchA)
commit < 3598c008c1a03598c008c1a0 (HEAD -> branchB)
git log branchA..branchB (查看branchB比branchA多的提交)
git log --oneline --decorate (查看各个分支当前所指对象 --oneline可省略,仅用来指明在一行显示)
git log --oneline --decorate --graph --all (查看提交历史,各个分支的指向以及项目的分支分叉情况)