Skip to content

Git 常用命令

基础

$ git init                      通过git init命令吧目录变成Git可管理的仓库。多出的.git目录默认是隐藏的
$ git init --bare project.git   不需要工作区时加bare参数,比如做服务器用的版本库
$ git add readme.txt            把文件添加到版本控制,先add,在commit ,可add多个文件
$ git commit -m "提交readme文件" 把文件提交到仓库,-m是提交文件说明,必填。
$ git rm test.txt               删除文件,执行rm再commit。如果删错了,[checkout找回测试不成功]
$ git rm --cached "文件路径",不删除物理文件,仅将该文件从缓存中删除
$ git rm --f "文件路径",不仅将该文件从缓存中删除,还会将物理文件删除(不会回收到垃圾桶)。
$ git rm -r --cached ./         踢除当前目录下文件夹的git缓存,不删除物理文件
$ git status                    查看仓库当前的状态
$ git diff readme.txt           查看具体修改的内容
$ git diff HEAD -- readme.txt   查看工作区与版本库最新版的区别
$ git log                       查看提交版本记录
$ git log --pretty=oneline      加上参数只输出commit id与提交备注信息
$ git reset --hard HEAD^        回退到上一版本,就上一次的commit,通过log查看最新版本会消失
$ git reset --hard aca736122cc1ddcaeb   根据commit id去指定版本,通过reflog命令找commitid
$ git reflog                    查看你的每一次命令
$ git reset --hard commit_id    使用此命令可在各版本间穿梭
$ git checkout -- readme.txt    把文件恢复到最近一次commit状态,也就是删除工作区修改的内容 --很重要,没有就是切换分支
$ git reset HEAD readme.txt     把暂存区的修改撤销掉(unstage),重新放回工作区

密钥生成与管理

$ ssh-keygen -t rsa -C "youremail@example.com"        创建SSH key 默认设置即可,id_rsa是私钥,id_rsa_pub是公钥
$ ssh-copy-id git@192.168.61.128                  建立ssh-keygen信任

远程连接

$ git remote -v   查看所有远程地址
$ git remote add origin git@github.com:agile-v/learngit.git       添加远程仓库,远程仓库的名字是origin,Git叫法
$ git push -u origin master          由于远程是空的,加-u建立关联,也就是把本地master分支推送到远程仓库origin
$ git push origin master             有commit过代码,就可以用此命令提交到远程仓库
$ git clone https://github.com:zingson/gitskills.git       已有远程仓库,直接clone到本地
$ git clone https://zengs:pass2857@github.com/pinezeng/demo.git
$ git remote rm origin                                     删除远程连接
$ git remote add origin git@github.com:Liutos/foobar.git   重新添加远程连接
$ git status        只能查看未传送提交的次数
$ git cherry -v       只能查看未传送提交的描述/说明
$ git log master ^origin/master    则可以查看未传送提交的详细信息

分支管理

$ git branch                         列出所有分支,当前分支会有一个*号
$ git branch -a                      列出所有分支名称,clone时,列出所有远程分支
$ git branch [name]                  创建分支
$ git branch -d [name]               删除分支,确定已提取需要的内容再删除
$ git checkout [name]                切换到name分支
$ git checkout -b [name]             创建分支并切换分支
$ git merge dev dev                  分支合并到当前分支,注意冲突问题
$ git merge --no-ff -m "merge with no-ff" dev        要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit
$ git log --graph --pretty=oneline --abbrev-commit   查看分支合并情况
$ git rebase --continue       解决完提交版本不一致问题继续操作

工作区临时存储

$ git stash 存储当前分支工作区文件,在临时修改bug时候很有用
$ git stash list 查看工作现场存储的记录
$ git stash apple 恢复工作现场
$ git stash drop 删除工作现场
$ git stash pop 恢复后删除

多人协作

$ git remote                    查看远程库信息
$ git remote -v                 查看更详细信息,显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
$ git push origin branch-name   推送本地分支到远程仓库
$ git pull                      更新远程仓库代码合并到本地,有冲突手动解决
$ git branch --set-upstream branch-name origin/branch-name     与仓库分支建立联系
$ git fetch:相当于是从远程获取最新版本到本地,不会自动merge

标签

$ git tag                       查看标签
$ git tag v1.0                  从当前分支创建标签,名称为v1.0
$ git tag v0.9 6224937          找到历史commit id打上标签
$ git show tag-name             查看标签tag-name信息
$ git tag -a v0.1 -m "version 0.1 released" 3628164           创建带说明的标签, git show查看
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a    用-s通过私钥签名一个标签,签名采用PGP签名,因此必须安装gpg
$ git tag -d v0.1               删除标签
$ git push origin v1.0          标签推送到远程
$ git push origin --tags        推送所有尚未推送远程的标签
$ git push origin :refs/tags/v0.9          删除远程标签,需要先执行本地git tag -d v0.9 删除

自定义git

$ git config --global user.name "somebody" 设置用户名
$ git config --global user.email "somebody@example.com" 设置邮箱
$ git config --global color.ui true 让命令窗口代码显示适当颜色
$ 在版本库的根目录添加.gitignore 文件, 用来过滤不需要版本管理的文件
$ git config --global alias.st status 配置别名,把git status 改成了git st,其他命令也都可以改
使用 git rm 命令即可,有两种选择,
$ git rm -r --cached ./   踢除当前目录下文件夹的git缓存,不删除物理文件
一种是 git rm --cached "文件路径",不删除物理文件,仅将该文件从缓存中删除;
一种是 git rm --f "文件路径",不仅将该文件从缓存中删除,还会将物理文件删除(不会回收到垃圾桶)。