git学习笔记

git在日常工作中是必然会遇到的一个版本管理工具,如果说以前大部分人还在用SVN,那么现在那个时代基本终结了,取而代之的是git。接下来我们就来介绍一下git和它的使用方法。

集中式版本管理系统和分布式版本管理系统的区别

集中式版本管理系统

集中式版本管理系统以SVN为代表,其特点是用一个“中央服务器”,代码存放在“中央服务器”上面,个人想要下载代码需要从“中央服务器”上下载,所以需要联网条件。既然现在还有小部分人在用SVN,那么它必然有优点,所以我们来总结一下优缺点

优点总结:

1.操作简单,使用没有难度,可轻松上手。

2.文件夹级权限控制,权限控制粒度小。

3.对客户端配置要求不高,无需存储全套代码。

缺点总结:

1.网络环境要求高,相关人员必须联网才能工作。

2.中央服务器的单点故障影响全局,如果服务器宕机,所有人都无法工作。

3.中央服务器在没有备份的情况下,磁盘一旦被损坏,将丢失所有数据。

分布式版本管理系统 

分布式版本管理的特点是每个客户端都是代码仓库的完整镜像,所有数据分布的存储在每个客户端,不存在中央服务器。所以一台机器宕机对整个系统没有任何影响。

有点总结:

1.版本库本地化,版本库的完整克隆,包括标签、分支、版本记录等。

2.支持离线提交,适合跨地域协同开发。

3.分支切换快速高效,创建和销毁分支廉价。

缺点总结:

1.学习成本高,不容易上手。

2.只能针对整个仓库创建分支,无法根据目录建立层次性的分支。

初始化项目

1.进入项目目录

2.执行git初始化指令git init

提交代码

第一步:git add 将当前新建、修改过的文件的内容生成快照,加入到索引中,或者删除工作树中不存在的路径。工作区——>暂存区

git add xxx.js (提交具体的某个文件)

git add . (提交所有变动文件)

第二步:git commit -m "aaaa" 将变动提交到暂存区 暂存区——>当前分支

第三步:git push 将代码上传到版本库 当前分支——>远程分支

常用指令

git status 查看当前分支的变动情况

git diff 查看具体变动

这里分为两种情况,一种是当暂存区中有文件时,另一种是暂存区中没有文件。

(1)当暂存区中没有文件时,git diff比较的是,工作区中的文件与上次提交到版本库中的文件。

(2)当暂存区中有文件时,git diff则比较的是,当前工作区中的文件与暂存区中的文件。

而 git diff HEAD -- file,比较的是工作区中的文件与版本库中文件的差异。HEAD指向的是版本库中的当前版本,而file指的是当前工作区中的文件。

如果要查看已暂存的将要添加到下次提交里的内容,可以使用git diff --cached或者git diff --staged。

git log 查看提交记录

git reflog 查看每次的操作记录

git reset --hard HEAD^  回退版本,几个"^"就回退到之前的第几个版本,HEAD~n,这样也行

git reset --hard 3628sada3832nnfs164 回到一个指定版本

git reset HEAD 把暂存区的修改撤销掉(unstage),重新放回⼯作区

git checkout -- readme.txt 撤销修改

这⾥有两种情况:

⼀种是readme.txt⾃修改后还没有被放到暂存区,现在,撤销修改就回到和版本库⼀模⼀样的状态;

⼀种是readme.txt已经添加到暂存区后,⼜作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个⽂件回到最近⼀次git commit或git add时的状态。


回撤场景总结

1.工作区回撤

git checkout

2.提交到了暂存区回撤

git reset HEAD

git checkout

3.提交到版本库

git reset --hard 34sdjfdsff342dfd3j43dj3


创建github仓库

步骤一:创建SSH key

$ ssh-keygen -t rsa -C "[email protected]"

执行之后会在⽤户主目录⾥找到.ssh目录,⾥⾯有id_rsa和id_rsa.pub两个⽂件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放⼼地告诉任何⼈。

步骤二:设置github里的key

登陆GitHub,打开“Account settings”,“SSH Keys”⻚⾯:然后,点“Add SSH Key”,填上任意Title,在Key⽂本框⾥粘贴id_rsa.pub⽂件的内容


仓库、分支相关指令

克隆仓库:git clone

克隆指定分支:git clone -b   

查看分⽀:git branch

创建分⽀:git branch name

切换分⽀:git checkout name

整理、排版:numbbbbb

创建+切换分⽀:git checkout -b name

合并某分⽀到当前分⽀:git merge name

删除分⽀:git branch -d name

删除远程分支:git push origin --delete

git stash的使用

有时候你在一个分支上开发了一部分功能,但是还没有开发完,这个时候有个bug出现了需要立刻修复,你需要切换分支,此时当前分支的改动你不想提交,也不想撤销,那么最合适的处理方式就是使用git stash,把你工作区中间状态的代码提交到git栈中。

git stash save "message"

git stash list 查看stash记录

git stash pop 恢复stash内容,把栈里面的内容删除

git stash apply <版本>恢复stash内容,栈里面的内容不删除

git stash drop 删除栈里的内容


git rebase的使用

rebase指令即常说的“变基”,改变分支hard指针的指向,可以把乱糟糟的分支线变成一条直线。还可以合并多次提交

合并提交

git rebase -i HEAD~n 合并之前的n次提交,会弹出来一个编辑窗口:内容如下

pick 3ca6ec3  '注释**********'

pick1b40566'注释*********

'pick 53f244a  '注释**********'

.将pick改为squash或者s,之后保存并关闭文本编辑窗口即可。改完之后文本内容如下:

pick 3ca6ec3  '注释**********'

s1b40566'注释*********'

s 53f244a  '注释**********'


如果有冲突就解决冲突,解决完之后

git add. 

 git rebase --continue

改变分支hard指针的指向

和merge一样,都是用来合并代码的,merge会自动生成一个commit,在这个节点上,会有两个指针指向不同的分支。

rebase会生成一份快照,粘贴到要合并分支后面,并且把原分支上的相关节点删除点,看上去就是一条直线


你可能感兴趣的:(git学习笔记)