很多时候在使用git的时候,常常会忘记一些命令的使用,这时候就需要去搜索或查找帮助,所以索性一次记录下常用的一些命令吧。
详细可参考:https://git-scm.com/book/zh/v2
git 帮助命令
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
一、查看git版本
git --version
二、配置user.name和user.email:
-
全局配置,对登录用户所有仓库有效
git config --global user.name 'your_name' git config --global user.email 'your_email@domain.com'
-
本地配置,只对该仓库有效,–local可省略
git config --local user.name 'your_name' git config --local user.email 'your_email@domain.com'
-
系统配置,对系统所有用户有效
git config --system user.name 'your_name' git config --system user.email 'your_email@domain.com'
-
显示config的配置
git config --list --local git config --list --global git config --list --system
-
清除配置
git config --unset --local user.name git config --unset --global user.name git config --unset --system user.name
他们之间的优先级为:local>global>system
三、创建一个git仓库
-
用git之前已经有项目代码
cd repo_path git init
-
用git之前还没有项目代码
cd dir git init your_project #会在当前路径下创建和项目名称同名的文件夹 cd your_project
-
获取远程仓库
git clone https://github.com/libgit2/libgit2
四、将工作区中的文件添加到暂存区
git add . #.表示所有文件,也可以添加单独文件
五、查看状态
git status
git diff #查看暂存前后的变化
git diff --cached #查看已经暂存起来的变化
六、将暂存区提交到版本库中
git commit -m '说明'
四六步也可以合起来:git commit -am ‘说明’
七、重命名文件:
git mv file_from file_to
八、移除文件
git rm filename
另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 当你忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用。 为达到这一目的,使用 --cached 选项:
$ git rm --cached README
git rm 命令后面可以列出文件或者目录的名字,也可以使用 glob 模式。 比方说:
$ git rm log/\*.log
注意到星号 * 之前的反斜杠 \, 因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开。 此命令删除 log/ 目录下扩展名为 .log 的所有文件。 类似的比如:
$ git rm \*~
该命令为删除以 ~ 结尾的所有文件。
八、查看版本历史:
git log
git log --oneline -all -n4 --graph
git log -n4 #显示最近4个记录
git log -p -2 #-p用来显示每次提交的内容差异,-2 来仅显示最近两次提交
git log --stat #选项在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结。
gitk #开启图形界面查看
更多的参数可查看 git help --web log #–web以网页的形式打开查看
九、撤销操作
-
提交后发现忘记了暂存某些需要的修改,可以像下面这样操作,最终你只会有一个提交,第二次提交将代替第一次提交的结果:
$ git commit -m 'initial commit' $ git add forgotten_file $ git commit --amend
-
取消暂存的文件
git reset head <file>
-
撤销对文件的修改
git checkout -- <file>
十、远程仓库的使用
-
查看远程仓库
git remote -v
-
添加远程仓库
git remote add <shortname> <url> $ git remote add pb https://github.com/paulboone/ticgit
-
从远程仓库中抓取与拉取
git fetch [remote-name]
必须注意 git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
-
git pull 命令会自动的抓取然后合并远程分支到当前分支
git pull [remote-name]
-
推送到远程仓库
git push [remote-name] [branch] $ git push origin master
-
查看远程仓库
git remote show [remote-name]
-
远程仓库的移除与重命名
git remote rename pb paul #将pb重命名为paul git remote rm paul #移除paul
十一、标签
-
轻量标签(lightweight)
一个轻量标签很像一个不会改变的分支 - 它只是一个特定提交的引用。
创建轻量标签,不需要使用 -a、-s 或 -m 选项,只需要提供标签名字git tag v1.4-lw
-
附注标签(annotated)。
附注标签是存储在 Git 数据库中的一个完整对象。 它们是可以被校验的;其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。 通常建议创建附注标签,这样你可以拥有以上所有信息;但是如果你只是想用一个临时的标签,或者因为某些原因不想要保存那些信息,轻量标签也是可用的。$ git tag -a v1.4 -m 'my version 1.4'
-
查看标签信息与对应的提交信息:
git show v1.4
-
后期打标签
$ git tag -a v1.2 9fceb02 #9fceb02 为提交的id
-
共享标签
默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样 - 你可以运行git push origin [tagname]。
如果想要一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令。 这将会把所有不在远程仓库服务器上的标签全部传送到那里。
git push origin --tags
十二、别名
可以通过 git config 文件来轻松地为每一个命令设置一个别名。 这里有一些例子你可以试试:
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
这意味着,当要输入 git commit 时,只需要输入 git ci。
——————————————————————————————————————————————
十三、分支
-
创建分支
git branch [branchname]
git branch 命令仅仅 创建 一个新分支,并不会自动切换到新分支中去。
-
分支切换
git checkout [branchname]
查看提交历史、各个分支的指向以及项目的分支分叉情况。
git log --oneline --decorate --graph --all
上述两个命令可以合并为
git checkout -b [branchname]
-
分支合并
将hotfix分支合并到master分支中
git checkout master git merge hotfix
-删除分支
git branch -d [branchname]
-
分支管理
查看所有分支的一个列表:
git branch
查看每一个分支的最后一次提交,可以运行
git branch -v
查看哪些分支已经合并到当前分支,可以运行
git branch --merged
查看所有包含未合并工作的分支,可以运行
git branch --no-merged
git cat-file -t ac91acedf #查看commit的类型
git cat-file -p ac91acedf #查看commit的内容