一、安装git
Linux:
先输入"git"看系统有没有安装git,没有就输入“sudo apt-get install git”,然后等待安装完成即可。
Windows:
去git官网下载对应Windows版本的git安装包,然后按默认安装即可。
安装完成后在开始菜单找到git bash,命令行输入:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
这相当于配置你这台机器的git凭证,使用–global参数,表示这台机器上的所有git仓库都使用这个配置。
二、git本地版本库操作
1、创建本地git版本库
cd进入到想要创建版本库的文件夹中,然后执行"git init"命令,git版本库就创建好了。它会在该目录下创建一个.git隐藏文件夹。这个文件夹就是git用来管理版本库的,这个版本库就相当于是svn的服务器,我们可以直接在本地进行版本管理。因为git是分布式版本管理系统,也就是说我们可以和其他机器上的版本库进行联系,可以相互进行提交下载等操作。但是在工作中,公司一般会搭建一台git服务器用作中央服务器,代码都托管到这,项目组成员之和服务器联系即可,和svn很想,但是git在本地是有版本库的,当没有网络时,我们可以在本地进行版本管理,等网络恢复后再提交到中央服务器即可。
2、把文件加到git版本库中
首先要确保文件和.git文件夹再同一个目录下(子目录也行)。总共分两步,
git add filename
git commit -m "message"
add命令表示将该文件或文件修改添加到暂存区,commit表示将暂存区里文件提交到版本库,可以多次add然后一次性commit。-m参数后面是对此次提交的说明信息0。必须要先add,然后再commit,否则你的修改是不会提交到版本库的
说明:
工作区:.git文件夹所在的目录就是一个工作区。
版本库:.git文件夹就是一个版本库,包含了暂存区以及各个分支的保存区,第一次创建会有一个默认的master分支。
暂存区:就是我们add后,文件保存的区域。
指针HEAD:指向你当前的分支
图片来源:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013745374151782eb658c5a5ca454eaa451661275886c6000
3、查看信息
git status 查看版本库的状态
git diff 查看具体修改的内容
git log 显示从最近到最远的提交日志,git为每次提交都分配了一长串的版本号
git reflog 查看历史命令
4、版本回退以及修改撤销
git reset --hard HEAD^ 版本回退至上一个版本,上上版本则是 HEAD^^,上100个版本则是~100,也可以使用--hard 版本号
(版本号不必写全,前面几位就行,保证唯一性)
git每次提交都是一个版本,回退到上个版本其实就是回到上次提交后的状态。
git checkout -- filename filename:文件名 撤销工作区的修改()
git reset HEAD <filename> filename:文件名,可不写,就是把暂存区的所以修改都撤销 撤销暂存区的修改
注意checkout 后的“–”。
当只再工作区修改,想撤销时使用checkout --命令。
当修改已经提交到暂存区还未到版本库时,先git reset HEAD,撤销暂存去修改,然后再git checkout – filename撤销工作区修改。
当修改已经提交到版本库(未提交到远程库)时,使用git reset --hard HEAD^ 命令回退到上一版本即可
删除:
1、确定删除:
git rm filename 删除文件
删除后需要commit才能生效。
2、误删:
使用git checkout – filename命令还原就行了,该命令其实就是用版本库里的版本替换工作区的版本,所以无论工作区是修改还是删除,都可以“一键还原”
5、分支管理
git分支相当多条于互不干扰的时间线,你在某个分支上工作,不影响其他分支,等工作完成后再把分支合并到主分支即可。
git branch name 创建分支
git checkout name 切换分支
git checkout -b name 创建并切换分支,相当于上面两条命令
git checkout -b dev origin/dev 本地创建并切换到dev分支,而且与远程库origin的dev分支建立联系
git branch 查看分支,当前分支前面有*
git merge name 把xx分支合并到当前分支
git branch -d name 删除分支
git branch -D name 强行删除分支,分支还没合并的情况下
git log --graph --pretty=oneline --abbrev-commit 查看分支提交合并记录
git merge --no-ff -m "merge with no-ff" dev 合并dev分支到当前分支 --no-ff表示禁用git默认的Fast forward模式,此时会产生一次提交所以要加上-m参数。并且可以看到提交历史,默认合并是没有提交的
git rebase 把本地未push的分叉提交历史整理成直线,使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比
当使用merge 命令合并分支时,产生冲突的话,我们可以解决玩冲突,然后再提交即可。merge 的–no-ff参数表示使用普通的合并方式,不使用默认的fast forward模式。这时合并后会有分支的历史纪录,而fast forward再分支删除后是看不到分支信息的,看不出来是否做过合并。
工作现场保存:
假如你在开发功能时,需要紧急修复bug,这边工作还没完成不能提交。这时候就可以用到git保存工作现场功能了。我们可以把现在工作现场保存起来,然后创建bug分支,去bug分支解决bug,解决完bug,提交合并后,删除bug分支,然后再回到上次工作的分支恢复工作现场接着干活就行了。
git stash 将当前分支工作环境存档(用于修改还没完成,这个分支还不能提交,但是有新bug需要紧急修复的情况)
git stash list 查看工作环境存档列表
git stash apply 恢复工作环境,但不删除存档,可以加上存档标识来恢复指定环境。
git stash pop 恢复工作环境,删除存档
git stash drop 删除存档
6、标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
git tag tagName 把当前分支打上标签,对应最新的commit
git tag 查看所以标签
git tag tagName commitid 为id为commitid的提交打上标签
git tag -a tagName -m "message" commitid -a指定标签名,-m指定说明文字
git show tagname 查看说明文字
git tag -d tagName 删除标签
git push origin tagName 将标签推送到远程库origin
git push origin --tags 一次性推送所有的标签到远程库
git push origin :refs/tags/tagName 删除远程库的标签,需要先删除本地标签
三、git远程版本库
1、SSH key设置
git可以使用多种协议,默认是是ssh协议,还可以使用HTTPS协议,我们使用ssh协议时就可以通过设置ssh key来方便我们连接远程库,否则,每次还需要输入账号、密码,也是很烦。
打开Shell(Windows下打开Git Bash),创建SSH Key:
ssh-keygen -t rsa -C "youremail@example.com"
使用自己的邮箱即可。中间会要你设置密码,也可以不输入直接跳过就行了。设置完后再用户主目录下会有一个.ssh目录。里面有id_rsa和id_rsa.pub两个文件,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,就是我们再github或者gitlab上设置的ssh key。
2、添加远程仓库
使用github或者码云都行,有些公司会使用gitlab托管代码。这里以github为例。假设你已经创建了一个本地仓库,现在想要把这个仓库放到github上托管。步骤:
(1)再github上新建一个仓库,然后复制这个仓库的链接地址(ssh或者https都可以)。
(2)再本地仓库执行git remote add origin git@github.com:dmfgithub1/reptile.git
。origin是自定义远程仓库名,一般默认用origin就行了,后面的是你的git仓库地址。
3、克隆远程仓库
当你想把远程仓库的项目下载到本地时,就可以使用clone来实现
git clone git@github.com:dmfgithub1/reptile.git
这样就把远程仓库里的内容克隆到本地了,而且默认远程仓库名是origin。
4、操作远程库
和远程库建立好连接后,我们就可以提交代码,或者拉取代码了。
提交:
git push <远程主机名> <本地分支名>:<远程分支名>
git push -u origin master 把本地库当前分支的所有内容推送到远程库上的master分支,-u 指定一个默认远程库,后续提交就不需要再加了。
git push origin dev 推送最新修改, 推送本地dev分支内容到远程库的对应分支上,如果远程库没有该分支,则会新建一个。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支
git push origin :master 删除远程库的master分支
等同于
git push origin --delete master
拉取:
格式:git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin 从origin远程仓库上抓取数据并自动尝试合并到当前所在的分支
git pull 从远程库拉取与当前分支对应分支的最新内容,如果当前分支没有与远程库的任何分支建立联系(master克隆或者推送时就默认建立了联系),则会提示no tracking information。
git fetch origin 从远程仓库origin中拉取数据,需要手动合并
git branch --set-upstream-to origin/dev dev 将本地dev分支与远程库dev分支建立联系。
其他:
git remote rename oldname newname 重命名远程仓库
git remote -v 查看已经配置好的远程库信息 ,不加-v则只列出仓库名
git remote show origin 查看origin远程库的具体信息
git remote rm origin 删除远程仓库origin
5、连接多个远程库
我们本地库可以连接多个远程库,使用git remote add
命令即可,但是要注意别名别冲突。
四、总结
本文是我在学习git时做的笔记,方便日后忘记时查看。主要是记录常用的git命令为主。主要参考了廖雪峰老师的git教程 ,讲了常用的git的用法。如果想要详细了解git命令,可以去易百教程学习。