前言
3年前我就知道了有git这么个东西,当时也学了,后面也断断续续又学又用了,可是还是感觉自己一直停留在只会git clone,git pull,git push的时代,到了公司实习什么拉分支、合并分支、版本管理等还是一窍不通,因此暗下决心,在好好学一遍git.
什么是git
简单来说gti就是一个版本控制工具,可以帮助我们简单点记录自己对于代码等文件的更改记录,记录我们每一次对于代码的更改。当然,这是对于一个程序员最基本的git功能。在一个团队中,git还可以实现多人同时对一个项目的开发管理。举个例子,对于一个项目雏形,a开发A模块,同时b开发B模块,同时c开发C模块;git记录下a,b,c三人对于原始项目的更改,然后自动合并大家的更改,即ABC都在项目雏形上开发好了,这么说可能有些抽象,下图展示了这一过程:
更深的理解,以往的版本管理工具是集中式控制的,而git是分布式的,没有所谓的“中央服务器”,每个人电脑上的都是完整的版本库,即所谓的本地库,这样不要联网也能正常开发。即使有人把“远程库”认为是中央服务器,那也只是起交换作用的。
git 安装
widows安装:直接官网下载安装包,一路”下一步到底“,然后在桌面右键出来的弹窗有Git Bash就说明安装好了
mac安装,好像记得直接再控制台输入git按回车就好了,也可以看看别人的教程。
开始Git
创建版本库
第一步,其实就是创建一个新的文件夹,window用户可以直接右键新建文件夹。我们的目标是这个版本库(文件夹)里的东西都可以被Git管理起来,可以记录每个文件的增删改,还可以还原历史版本。
第二步,通过git init 将这个目录变成可以被Git管理的仓库
接下来就可以在这个learngit目录下进行文本内容的编辑了,每次编辑好后,可以用git add "文件名“/* 提交我们的修改到暂存区,然后用**git commit -m “修改内容”**将这批的修改(暂存区的所有内容)提交到版本库。注意,没有add的话,commit是没有效果的哦。
工作区、版本库和暂存区的理解
工作区简单来说就是电脑可以看到的目录,比如learngit这个文件夹,
版本库简单来说就是.git这个隐藏文件夹,在版本库中,最重要的就是称为stage的暂存区,当然默认创建的master分支以及HEAD指针也在此。
commit提交规范
git时间管理
git status查看工作区
查看工作区状态,准确来说是还没进行过git commit之前的修改.
git add之前可以通过git diff查看修改内容
git log查看历史版本
可以看到我commit了三次,由于偷懒,每次commit的内容都一样了,尴尬。那现在,我需要回退到第一个提交,保证以后都不犯这种同名的错了。
那么如何回退呢?
git reset 版本回退
首先,在git中每次commit都会生成一个版本号,就是上图那一长串黄色字体。而HEAD表示当前版本,HEAD^表示上个版本,以此类推。所以回到上个版本的代码是:
git reset --hard HEAD^
刚执行完这个代码发现又后悔了,忘了最后一次修改了什么但就是感觉很重要,怎么恢复呢?
git reset --hard 版本号前几位
通过版本号我们可以定位到每个版本,
”可是我回退了,git log里没有最后一次的版本号了怎么办?“
“刚刚不是在上一部输出过一遍吗,翻翻看”
“可是我不小心把这个窗口关了”
好吧,不过还可以通过git reflog来查看你的每次操作,如下,我在acf1cd0的版本进行了moving to HEAD^到上个版本呵呵
所以
git reset --hard acf1cd0完美
不过我的最终目的是恢复到第一次用“understand how stage works"的版本,而这个版本号是。。。。
nice
补充说明,git reset只是版本切换(或者说是将HEAD指向了不同的版本),并没有删除版本因此可以换来换去.
git restore/get reset 撤销修改
1.修改还未add,git restore file
2.已经add,git reset file + it restore file
远程仓库
1.本地与远程库的链接
第一步:
首先生成SSH,ssh-keygen -t rsa -C “youemail”
将生成的.ssh中的id_rsa_pub里的内容复制到git上
第二步:
在gitup上创建新项目,安装提示关联本地仓,并将本地代码push上去。
分支管理
不同分支,同步开发
创建分支其实就是创建了一个新的指针,切换分支就是将HEAD指向不同分支的指针,如下图
git checkout -b dev 创建并切换分支
相当于 git branch dev + git checkout dev
git branch 查看分支
git merge 合并指定分支到当前分支
如在main分支上用git merge dev 合并了dev分支
git branch -d 分支名 删除某分支
遇到合并冲突
先解决好冲突,再git add git commit
git log --graph 产看分支合并图
git merge --no-ff -m “merge with no-ff” dev有历史
能够看到合并历史,便于团队管理
git stash 暂存工作现场
当我们在开发的时候,还未add或还未commit的时候,需要切换分支去处理别的事情,可以先用git stash 将未完成的工作暂存.然后去修复bug,修复完成后再给git stash pop,取出暂存的工作,继续开发。
git rebase 将本地未push的分叉提交历史整理成直线
git tag打标签
git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a -m "blablabla…"可以指定标签信息;
git tag可以查看所有标签。