Git命令
Git简介
-
版本控制工具的发展历史经过:原始人工维护状态,本地RCS,集中式如VCS、SVN和分布式如Git。
-
版本控制工具提供了协作开发的能力,借助它们我们可以回到任何时间的代码状态。
-
集中式版本控制工具,几乎所有的动作都需要服务器参与,并且数据安全性与服务器关系很大。
-
Git 是分布式版本控制工具,除了与服务器之前进行按需同步之外,所有的提交操作都不需要服务器。
命令补齐
将Git源码包里的命令补齐脚本复制到bash-completion对应的目录中,执行命令cp contrib/completion/git-completion.bash /etc/bash_completion.d/
,然后重新加载自动补齐脚本使自动补全生效,命令为:. /etc/bash-completion
。如果要自动补全永久生效,则需要修改本地配置文件~/.bash_profile
或者全局配置文件/etc/bashrc
文件,添加如下内容。
if [-f /etc/bash_completion];then
. /etc/bash_completion
fi
Git基本配置
系统配置:git config --system 文件
用户配置:git config --global 文件
,常用配置如下。
命令 | 说明 |
---|---|
git config --global user.name zhangsan | 配置姓名 |
git config --global user.email 111@qq.com | 配置邮箱 |
git config --global core.autocrlf true | 配置提交代码时将lf转换为crlf,windows中签出代码时会将crlf转换为lf |
git config --global gui.encoding utf-8 | 配置编码 |
git config --global i18n.commitEncoding utf-8 | git commit采用的编码 |
git config --global i18n.logOutputEncoding utf-8 | git log采用的编码 |
仓库配置:git config --local 文件
Git基本概念
版本库、工作区、暂存区
基本指令
git指令 | 作用 |
---|---|
git init | 将当前文价夹初始化为git仓库(版本库) |
git add "文件名" | 将文件存在暂存区,该文件必须在仓库中,与.git文件(默认隐藏)同一目录 |
git rm "文件名" | 删除某文件到暂存区 |
git move "文件名" | 移动某文件到暂存区 |
git commit -m "描述信息" | 将暂存区的文件推到仓库 |
git status | 查看仓库状态 |
git diff "文件名" | 查看修改内容 |
git reset --hard HEAD^^ | 回退到上两个版本 |
git reset --hard HEAD~100 | 回退到上100个版本 |
git reset --hard 版本号 | 回退到具体某个版本 |
git reflog | 查看用过的命令记录 |
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。git add
命令实际上就是把要提交的所有修改放到暂存区,执行git commit
就可以一次性把暂存区的所有修改提交到分支.
git指令 | 作用 |
---|---|
git restore "文件名" | 回退修改但未提交的内容 |
git checkout -- "文件名" | 放弃对工作区的修改,未add前 |
git restore --staged "文件名" | 将add到暂存区的文件撤销 |
git reset HEAD “文件名” | 将add到暂存区的文件撤销 |
git rm “文件名” | 将删除请求添加到暂存区 |
操作github远程仓库
生成公钥和私钥:ssh-keygen -t rsa -C "设置的email"
执行完以上的指令后,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。将公钥上传到github上,这样就可以实现远程仓库的连接。
git指令 | 作用 |
---|---|
git remote add origin git@github.com:github用户名/远程仓库.git | 将本地仓库和远程仓库关联,远程仓库叫origin |
git push -u origin master | 第一次推送master分支的所有内容到远程库 |
git push origin master | 推送master分支的所有内容到远程库 |
git clone git@github.com:‘用户名’/远程库名.git | 从远程库克隆项目到本地 |
git remote -v | 查看远程库的信息 |
git pull 远端仓库 分支名称 | 从远程库拉取对应分支的更新与本地合并 |
git fetch 远端仓库 分支名称 | 从远程库拉取对应分支的更新 |
git remote rm origin | 删除与origin远程库的连接 |
分支管理
git指令 | 作用 |
---|---|
git branch '分支'; | 创建分支1 |
git checkout '分支1' | 切换到分支1 |
git switch '分支1' | 切换到分支1 |
git checkout -b '分支1' | 创建并切换到分支1 |
git checkout -b dev origin/dev | 创建分支并与远程库的dev分支关联 |
git branch --set-upstream-to=origin/dev dev | 设置本地分支和远程分支连接 |
git switch -c '分支1' | 创建并切换到分支1(新版) |
git branch | 查看当前分支 |
git merge 分支1 | 将分支1合并到当前分支上 |
git branch -d '分支1' | 删除分支1 |
git branch -D '分支1' | 强行删除分支1,即便分支1未被合并 |
git log --graph --pretty=oneline --abbrev-commit | 查看日志中的分支合并图 |
git merge --no-ff -m "merge with no-ff" 分支1 | 禁用fast forward的合并 |
git rebase | 把本地未push的分叉提交历史整理成直线 |
分支合并发生冲突时,需要查看文件内容,看各自分支修改的内容,然后手动修改文件后再次提交文件。
合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息,添加上--no-ff -m
后,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
一般利用分支工作的流程如图所示:
公司的每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并,并且dev分支也会定时往主分支合并。
git可以实现保存当前分支工作现场的功能,保存后就可以切换到其他分支工作,工作完之后可以回到当前分支继续干活。
git指令 | 作用 |
---|---|
git stash | 将该分支的事务搁置 |
git stash list | 查看所有被搁置的事务 |
git stash pop | 恢复当前第一个事务并且将stash中相应的搁置信息删除 |
git stash apply stash@{num} | 恢复某个具体的事务,但不会删除stash中的搁置信息 |
git stash drop stash@{num} | 删除stash中的某个搁置信息 |
git cherry-pick commit号 | 将提交的修改“复制”到当前分支,避免重复劳动 |
标签管理
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针。默认标签是打在最新提交的commit上的。
git指令 | 作用 |
---|---|
git tag | 查看所有标签 |
git tag -a v1.0 -m "说明" | 给最近的提交打标签v1.0,并添加说明 |
git tag v1.0 commit_id | 给对应的提交打标签 |
git show <tagname> | 显示某个标签的具体信息 |
git tag -d v0.1 | 删除标签名未v1.0的标签 |
git push origin <tagname> | 向远程库推送某个标签 |
git push origin --tags | 向远程库添加所有标签 |
git push origin :refs/tags/<tagname> | 删除一个远程库标签,前提是本地的该标签已删除 |
使用github
将别人项目Fork到自己的账号中,然后用git clone ssh地址
将项目拉取到本地操作,如果原项目是直接在别人账号中克隆的,那么将无法完成推送修改,因为没有权限。
声明
该学习笔记来源于廖雪峰老师的网站,老师的 git 教程堪称全网最好,没有之一!
廖雪峰git官网