git的基本用法
一,前言
网上有太多关于git的用法说明,而我看得云里雾里,可能是本人比较愚笨。平常时间老问别人又觉得很不好意思,估计大多的同学们都是自己解决。后来我想到了买一本书,淘宝上git书籍几百页,吓死个人。话不多说,在此记下我的一点点体会,和大家一起学习,有错误的地方请大家不吝指正!
二,目录
四:git协作模式。
五:常用操作。
六,小知识技巧
三,工作区,缓存区,本地库,远程库的区别。
在我知道一些git命令,但是常常不敢随意用的时候(怕自己的git命令“破坏”项目,到时候让别人擦屁股就尴尬了),我请教我们敏哥分享一个博文,他却告诉我:首先要搞清楚本地代码,暂存区,本地分支,远程分支,master分支的含义和关系。啰嗦这些就是要说这几个名词是让我们理解git操作的关键。开干:
工作区:就是我们实际看到的目录和目录里的内容,我们的编写代码就是在工作区内进行。当我们修改/添加/删除操作后,工作区就发生了改变。
缓存区:当我们进行add操作后,工作区的修改就保存到了缓存区。它的英文名字叫做stage, 或index,它记录着你对文件的修改。当你仅仅使用了add命令后,这时候stage里面是保存了修改的,但是本地库(版本库)里面是没有改变的。效果如下
只有当进行了commit操作后,会把stage(缓存区)清空,使用工作区与本地库一致,如下:
本地库:顾名思义,本地相对于远程库来命名的。隐藏目录.git,就是Git的版本库。我在此称为本地库,它包含了stage,本地的分支。Git会自动帮我们创建一个名叫master的分支。
远程库:远程服务器上的另一个项目库。
四,git协作模式。
git 优点在此不多累述,直接说我对git协作的理解。
首先由经理搭建好项目,放在服务器上(其实就是某一个版本认定为主分支)。然后经理一个人太忙了,完成一个项目耗时太长,于是召集了张三,李四,王五三个同学一起开发。
1,clone远程代码:git clone 远程项目的克隆地址
张三首先将远程代码clone到本地。Git就给他创建了一个本地的master。这时候就有了远程库的master分支和张三本地的master分支。这两个分支就是有关联关系的,什么是关联关系,后面说。git branch可以看到单写的master就是本地的master分支,进入git bash(输git命令的地方)那里面看到的括号里面的文字说明你当前处于的分支。
2,创建本地分支:git checkout -b zhangsan
这条命令其实是git branch zhangsan (注释:创建zhangsan分支) 和 git checkout zhangsan (注释: 转换为zhangsan分支)的缩写。
那你就要为了为什么要创建zhangsan分支呢。因为如果你在本地的master分支上做了commit,你push到的地方是和本地master有关联的远程master分支。那是最后整合的最终的最重要的版本。还没经过经理审核,你就弄上去,那要是除了错那不是麻烦了。于是乎,你建了一个zhangsan分支,你在上面捣鼓来捣鼓去,好,捣鼓满意了,你要提交给经理看看你的最终成果。add ,commit 。本地zhangsan分支很ok了,你心满意足的执行了git push命令。这时候强大的git会为你在远程创建一个zhangsan分支。可以输入git branch -a 查看到,除了本地master,本地zhangsan,远程的master ,还多了一个远程zhangsan(remotes/origin/zhangsan) 。远程的zhangsan和本地的张三是关联的。在本地zhangsan执行pull是将远程的zhangsan代码pull到本地zhangsan分支。在本地zhangsan分支执行git push,是将本地zhangsan分支的代码push到远程的zhangsan分支。
3,合并远程master分支:git merge 远程主干分支
这是为了防止别人已经提交了,合并到了远程主分支,而你们同时修改了一个文件。因为你本身对修改的文件比较熟悉,所以你来先合并远程主分支,不然经理处理起你们的冲突会更加困难。这时候merge 远程主干分支,常会让你输入合并的理由Please enter a commit message to explain why this merge is necessary. 解决方法:
git 在pull或者合并分支的时候有时会遇到这个界面。可以不管(直接下面3,4步),如果要输入解释的话就需要:
(1).按键盘字母 i 进入insert模式
(2).修改最上面那行黄色合并信息,可以不修改
(3).按键盘左上角"Esc"
(4).输入":wq",注意是冒号+wq,按回车键即可
记住这一切都是在你的本地的zhangsan分支上输入的git命令。在merge远程的master分支最新代码之后。再次执行git push。这时候你本地的zhangsan分支的代码和远程的zhangsan分支的代码是一致的而且,超前于远程的master分支。可用git diff 查看具体。
4,提交merge request。
告诉经理,你提交了代码。让他去合并。我们用的是gitLab,在gitLab找到自己的远程代码分支,上面有显示自己刚刚做出的提交。点击+Merge Request,在里边填好,写上代码说明即可。
提醒:每次在做一次开发,或者解决一个bug之前先要merge主分支一次,让自己的代码保持最新。
五,常用操作。
git add . :添加所有修改到stage缓存区。
git commit - '说明' :提交所有缓存区的修改到对应的版本库。
git pull :从与之关联的分支上下载最新代码。
git push :将当前分支推送到与之对应的分支上。
git diff:比较工作区与缓存区的区别。
git diff –cached:比较的是暂存区和版本库的差别。
git diff 分支地址A:可以查看工作区和分支地址A的差别。
git diff 分支地址A 分支地址B:可以查看分支地址A和分支地址B的差别。
git status:查看仓库状态。
git branch 分支A:创建分支A。
git checkout 分支A: 切换到分支A。
git branch -a:查看所有的分支。
git branch -d 分支A:删除分支A,‘-d’改为‘-D’是强制删除分支。
git merge 分支A:将分支A的代码合并到当前分支。
不常用:
git init :初始化Git仓库。
git log:查看提交历史,以便回退到哪个版本。
git reflog :查看命令历史,以便回退到未来的版本。
git checkout -- file:丢弃工作区file的修改。
git reset HEAD filr :丢弃添加到了缓存区file的修改。
git reset --hard HEAD^ 回退到某个分支
git rm file:删除某文件。
git remote add origin git@server-name:path/repo-name.git :关联一个远程库。
git push -u origin master:第一次推送master分支的所有内容。之后可以不用加“-u”。
git push -f:强制上传
git log --graph:查看分支合并图。
git stash:将工作区暂存起来,使其还原到没有修改之前。
git stash pop:将暂存的工作区释放出来。
git remote -v:查看远程库信息。
git push origin branch-name :在本地推送分支。
git checkout -b branch-name origin/branch-name:在本地创建和远程分支对应的分支。
git branch --set-upstream branch-name origin/branch-name:建立本地分支和远程分支的关联。
git tag <name>:新建一个标签,默认为HEAD
,也可以指定一个commit id。
git tag -a <tagname> -m "blablabla...":可以指定标签信息。
git tag -s <tagname> -m "blablabla...":可以用PGP签名标签。
git tag:查看所有标签。
-
命令
git push origin <tagname>
可以推送一个本地标签; -
命令
git push origin --tags
可以推送全部未推送过的本地标签; -
命令
git tag -d <tagname>
可以删除一个本地标签; -
命令
git push origin :refs/tags/<tagname>
可以删除一个远程标签。
六,小知识技巧
1,Git支持多种协议,包括https
,但通过ssh
支持的原生git
协议速度最快。
2,当你正在开发功能A时,经理和你说有一个bugB必须立马解决,客服反应很强烈,这个bugB解决起来很简单,只要10分钟。这时候你又不能放弃开发了3,4天的功能A,于是你执行git stash命令,将开发到一般的功能A藏起来,立马解决bugB并且推送上去,发起request请求让经理合并到远程主分支。整个过程15分钟搞定。之后git stash pop继续开发功能A。
3,在还不是很理解各个命令会有什么作用的时候,多多使用git diff命令。
推荐大家看这些,以便更加理解。
分支的新建与合并:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E4%B8%8E%E5%90%88%E5%B9%B6
廖雪峰老师的教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
结尾:一个稿写下来还是要蛮久的,转载请注明出处!此篇有些是个人理解,写的不好的地方,更甚者可能有不当或错误,请各位慷慨指出,我定立即改正,以免误人子弟!