Git 常用命令集

不总结不知道,一总结才发现 Git 的强大非比寻常。本文将 Git 的一些常用操作命令列出,以便今后查看,说不定哪天就全命令操作了呢。

基础

创建版本库

  • 新建或者来到一个目录下,使用如下命令,使之成为 Git 库
  • 使用命令后,将会生成一个 .git 目录,此目录不可随意删除
1
git init

克隆远程库

  • 知道 Git 库地址后,可以用克隆的方式将其克隆到本地,比如 GitHub 的开源库
  • Git 支持 sshhttps 协议
1
git clone

添加文件

  • 添加命令只是把文件添加到暂存区,需要进行提交之后才会正式添加到仓库中
1
git add <file>

提交修改

  • 把所有添加到暂存区的文件提交到仓库中
  • Git 记录的是修改,不管是改了仓库中文件内容,还是新增或删除文件,都算修改操作
  • -m 指定此次提交的描述文字,为了方便以后查阅,最好每次都写上有意义的描述文字
1
git commit -m "commit-message"

拉取

  • 从远程仓库拉取最新的内容
1
git pull

推送

  • 将本地仓库的修改推送到远程仓库
1
git push

查看状态

  • 不管是做了什么操作,想知道当前工作区的状态,可以用下面的命令查看工作区所处状态
  • 比如告诉你文件内容有没有被修改,是否有新增文件,修改有没有被提交等
1
git status

如果是一个人开发的话,知道添加、提交、推送就差不多了…

增删改查

添加所有

除了单个文件添加外,还可以把所有修改都添加到暂存区

1
2
3
git add . //添加新文件和被修改的文件,但不包括被删除的文件
git add -u //添加被修改和被删除的文件,但不包括新增的文件,-u 是 --update 的缩写
git add -A //添加所有变化,集合了上面两个命令的功能,-A 是 --all 的缩写

查看

利用 log 可以查看所有提交的修改记录

1
2
3
4
git log //显示最近的提交日志,最原始,不带任何过滤
git log --pretty=oneline //每条日志只显示一行,简化日志显示
git log --pretty=oneline --abbrev-commit //继续简化提交id长度
git log --graph --pretty=online --abbrev-commit //日志里显示分支合并情况

查看历史操作命令记录

1
git reflog

查看当前指定文件修改内容的前后变化

1
git diff <file>

查看指定文件在工作区与版本库中的区别

1
git diff HEAD -- <fiel>

删除

rm

删除文件,操作之后不要忘了提交

如果已经在目录中手动删了了文件,此时用 git rm 和 git add 效果一样

1
git rm <file>
clean

删除所有未被添加的修改

1
2
git clean -n //演习,告诉你哪些文件将会被删除
git clean -df //删除当前所有没有被添加过的文件和文件夹
reset

此命令主要用于版本回退,但是也能起到删除的作用

用 git reset –hard 和 git clean -df 会让所有此次修改都 say goodbye

注意:如果已经关联了远程仓库,用 reset 的回退命令

1
2
3
git reset --hard <commit-id> //回退到指定提交的版本,提交 id 不写默认是最近一次提交
git reset --hard HEAD^ //回退到上一个版本,上上一个版本是 HEAD^^,上100个版本写成 HEAD~100
git reset HEAD <file> //将添加到了暂存区的文件退回工作区
checkout

此命令主要用于切换分支,不过也可以起到删除作用

其中的 -- 是关键

1
git checkout -- <file>  //丢弃修改,让指定文件回到最近一次 git commit 或 git add 状态

远程操作

关联远程仓库

1
git remote add origin <git@url>  //origin 是远程仓库名,可以取别的,后面跟地址

推送

git push 是默认推送,但如果是初次与远程库关联,初次推送时,用下面的命令

-u 是因为远程仓库是空的,git 会把本地的 master 分支内容推送到远程新的 master 分支,并关联远程库的 master 分支,以后的推送时就不需要加-u了

1
git push -u origin master

查看远程库信息

1
2
git remote  //查看远程库的信息
git remote -v //显示远程库的详细信息

删除远程库关联

1
git remote rm origin

分支

创建

1
git branch <branch-name>

切换

1
2
git checkout <branch-name> // 切换到指定分支
git checkout -b <branch-name> origin/<branch-name> //创建并切换到和远程分支对应的分支

查看

1
git branch //会显示所有分支,当前分支用 * 号标记

关联

有时候推送的时候,会发现未与远程分支关联

1
git branch --set-upstream-to=origin/<branch-name> <branch-name>

合并

1
2
git merge <branch-name> //合并指定分支到当前分支,默认会用 Fast-forward 快速模式
git merge --no-ff -m “messge” <branch-name> //合并,--no-ff参数,表示禁用 Fast forward 模式

删除

1
2
git branch -d <branch-name> //删除已经合并的分支
git branch -D <branch-name> //强行删除未合并过的分支

标签

创建

1
2
3
git tag <tag-name> //创建标签,默认指向最新的提交
git tag <tag-name> <commit-id> //对指定提交打标签
git tag -a <tag-name> -m “messge” <cmmit-id> //创建带说明的标签,-a 指定标签名,-m 指定说明文字

查看

1
2
git tag //查看所有标签
git show <tag-name> //查看标签信息

推送

1
2
git push origin <tag-name> //推送某个标签到远程库
git push origin --tags //一次性推送所有未推送的标签到远程库

删除

1
2
git tag -d <tag-name> //删除标签
git push origin :refs/tags/<tag-name> //删除远程标签(先从本地删除)

其他骚操作

储藏

1
2
3
4
5
6
git stash //把当前未提交的修改储藏起来
git stash list //查看所有的储藏
git stash apply //恢复储藏,恢复后 stash 里的内容不会删除
git stash apply <stash-name> //恢复指定储藏
git stash drop //删除储藏
git stash pop //恢复储藏并删除储藏

变基

1
git rebase //把本地未push的分叉提交历史整理成直线,这个功能貌似只是让查看历史提交记录时好看点

撤回

1
2
3
git revert <commit-id> //撤回到指定提交
git revert --continue //继续撤回,用于在撤回时发生了冲突,且解决了冲突的情况
git revert --abort //取消撤回,用于在撤回时发生了冲突,而不想解决冲突的情况

配置

全局配置

1
2
3
4
5
git config --global user.name “Your name” //配置git全局用户名,--global 针对全局,如果不加只针对当前仓库
git config --global user.email “your email” //配置git 全局 Email,配置文件在 .git/config 文件中
git config --global color.ui true //让 git 显示颜色,让命令输出看起来更醒目
git config --global alias.st status //给 status 设置别名,可以用 git st 代替 git status
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" //给 log 设置别名

SSH

1
ssh-keygen -t rsa -C “youremail” //创建 SSH Key,将在 .ssh 目录下生成一个私钥 id_rsa 和公钥 id_rsa.pub