Git 常用命令
这是git --help
的输出,老司机应该看这个就可以。
新手看命令行的帮助信息可能还有些吃力。
这里理出一些常用命令与介绍,给你作为速查手册。
基础
$ 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 "文件路径",不仅将该文件从缓存中删除,还会将物理文件删除(不会回收到垃圾桶)。