参考网站:
廖雪峰git
runoob git
小甲鱼 git
B站
B站2
资料链接:https://pan.baidu.com/s/198DTTtI2hQlKj7rB6zeQNw
提取码:jme6
下面是几个的tips:
1.集中式和分布式区别
CVS SVN 集中式版本控制系统
Git 分布式版本控制 最初是为了管理开源 Linux 提交的代码而产生。linus 两周用C写完了git原型
集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。集中式版本控制系统最大的毛病就是必须联网才能工作。
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理。
git 笔记 小甲鱼: 上面小甲鱼链接里面有详细介绍
朴素手动的版本管理方式不行!
git 将每个版本独立存储
工作区域 暂存区域 git 仓库
一. 基础
git config --global user.name "wgd"
git config --global user.email "[email protected]"
3.新建一个 readme.md 文件 内容随便写 [对应流程第一步]
并且提交到git
git add Readme.md
【第二步加入到暂存区域】
git cmmit -m "add a readme file"
【第三步将暂存区域提交到git仓库】
100代表普通文件 644是文件的权限
二.查看状态
1.git status
新建LICENSE文件存储MIT 协议【先不用管是什么东东】
再次执行 git status
出现红色license untracked files : 新添加的文件但并没有提交到暂存区域【逍遥法外的文件】,按照提示加入暂存区:
这时查看状态 出现提示 意思是用2.git reset HEAD
恢复到暂存区之前状态
按照命令操作后 发现 LICENSE 已经恢复之前状态。
三. 修改 LICENSE 文件
修改之后查看状态:
修改后的文件和暂存区的文件不匹配。git 给出两条建议
1.使用add
覆盖暂存区再提交
2.使用3.checkout
将暂存区覆盖掉工作区 【危险命令】
按照第一步 add 入暂存区之后 ,如果此时修改 工作区license 文件后,查看状态:
问题出现了! 同时存在两个不同版本的文件 【工作目录和暂存区】可以提交提交两种不同的。
提交最新版 就是把跟新的LICENSE 先 add 进 暂存后commit 仓库
查看历史提交记录 4.git log
四. 回滚 RESET 命令
git reset HEAD~
倒数第二个版本回滚到暂存区中执行后状态: 暂存区和git 仓库都为单数第二个版本了[~number number代表倒数第几个快照或者版本]
这个时候git log 发现 看不到最新版本了 【只能看到 HEAD 之前版本】
2. reset 命令选项
git reset --mixed HEAD~ [默认]
git reset --soft HEAD~
git reset --hard HEAD~
分别是影响 2 1 3 棵树
hard 比较危险 因为会工作区 也会更改:
此时 工作区回到最初版本了 LICENSE 已经被删掉
git log 只剩下一个版本
回滚指定快照 :git reset + 快照ID
[还可以向前滚 !!!]
回滚个别文件: git reset 快照+ 文件名/路径
tips: 5.git reflog
找回历史id
五 版本对比 dif
比较暂存和工作目录文件的不同:命令 git diff
比较两个历史快照 git diff 快照1 id 快照2 id
比较工作目录和git 仓库 git diff HEAD
比较暂存和git 仓库 git diff -- cached
六 .分支修改最后一次提交 删除和重命名文件
1.修改最后一次提交
场景一: 版本一刚提交(commit) 到仓库,漏掉两个文件没有添加(add)
场景二: 修改readme文件,并加入至暂存区,想提交至仓库,但是 不想生成一个新的快照版本。
针对场景二:利用 git commit --amend
命令
2. 删除文件:
如果在公国目录删除了readme 文件 这时候 git status
恢复 利用 git checkout -- Readme.md
删除上传的yellow.jpg git rm yellow.jpg
但是 git status 还是会留下痕迹
这时候 git reset --soft HEAD~
当工作区和暂存区文件不同时:用 git rm -f 文件名
删除暂存区保留工作区文件:用 git rm --cached 文件名
总结:
3.重命名文件
手动修改工作区 game.py 为 what game.py 然后:
在 git 中修改文件名:git mv game.py wegame.py
七. git 创建和切换分支
分支重要性:
1.创建分支:git branch 分支名
git branch feature
2.切换分支 git checkout 分支名
git checkout feature
git log --decorate --oneline
在feature 分支中提交之前更改的wordgame.py文件名和Readme 此时现在的状态:
之后切换到 master 做相应修改 然后
图像化显示分支:
git log --decorate --oneline --graph --all
Master 用来发布
hotfix 用来修补 bug
Release 内部发布版 开发完之后编译成一个可执行程序就是Release
Develop 开发版
Feature 相关功能
1.分支合并 git merge feature
feature 子分支
出现冲突手动修改
发现合并进来了
创建并切换分支 git checkout -b feature2
:
合并进master 分支:
2.删除分支
git branch -d feature2
虽然删除了分支 分支是通过指针实现的 所谓分支是通过指针一个名字记住。
九. 匿名分支 和checkout 命令
新建一个project 随便创建三个txt 文件分别提交至git 仓库
git checkout HEAD~
切换分支没有指定分支名就创建一个 匿名分支 用来做实验 尝试
现在是回到导数第二个快照 创建一个4.txt 并提交
匿名分支创建成功 但是切换为master 分支:
这时候匿名分支就消失了 但是记住分支名还是可以切换回去的。
2.checkout 命令
两种功能:
1.从历史快照中(或者暂存区中)拷贝文件到工作区、
2.切换分支
reset和checkout 区别:
举例:
场景:
十. github