python-之git讲解

无论测试还是开发,我们都会用到版本控制系统git、 RCS、CVS、SVN 等
下面我们开始学习下-Git 是目前世界上最牛逼、最先进的分布式版本控制系统,慢慢Github网站正式上线,GitHub 已经是世界上最大的代码存放网站和开源社区

一:版本控制系统分类
SVN :集中式版本控制系统
集中式版本控制系统需要找一个服务器作为大本营,所有的代码都需要提交到服务器上进行统一的管理。当你需要对代码进行改动时,需要先从服务器上下载一份拷贝,修改完成之后,还需要上传回服务器。
Git :分布式版本控制系统

二:git安装
由于git的前后兼容挺好,可以资助下载或以下链接下载
git版本:
提取码:kufe
复制这段内容后打开百度网盘手机App,操作更方便哦
https://pan.baidu.com/s/1exhiGGrrdW2Us6CYrsYwXg

初次使用 Git 前的配置

查看当前用户(global)配置
git config --global --list
在这里插入图片描述

设置用户和邮箱:

git config --global user.name "myname"
git config --global user.email  "test@gmail.com"

在这里插入图片描述

三:git工作原理
在这里插入图片描述
工作区域(Working Directory)就是你平时存放项目代码的地方。

暂存区域(Stage)用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息。

Git 仓库(Repository)就是安全存放数据的位置,这里边有你提交的所有版本的数据。其中,HEAD 指向最新放入仓库的版本(这第三棵树,确切的说,应该是 Git 仓库中 HEAD 指向的版本)。

Git 的工作流程:

a. 在工作目录中添加、修改文件;

b. 将需要进行版本管理的文件放入暂存区域;

c. 将暂存区域的文件提交到 Git 仓库;

四:初始化git
1,首先需要新建目录放作为本地git提交的local dir:文件夹就是 Git 用来跟踪管理版本迭代的
初始化:
cd 新建目录 =》 git init
在这里插入图片描述
成功标志查看dir内出现.git 隐藏文件夹

Git提交步骤:

提交到缓存区跟踪:git add 文件夹内文件或者文件名
提交到git上:git commit -m "提交git是做什么?"=="change the readme.md file"

在这里插入图片描述
amazing!
Git 还允许你将别人的库据为己有,
克隆一个现有的仓库,可不用跟当事人申请,直接输入 git clone 目标 命令即可

git clone http://github.com

在这里插入图片描述

五:git状态
1,git status 命令查看当前的状态
在这里插入图片描述
On branch master 说明我们位于一个叫做“master”的分支里,这是默认的分支

nothing to commit, working directory clean 说明你的工作目录目前是“干净的”,没有需要提交的文件(意思就是自上次提交后,工作目录中的内容压根儿就没改动过)

2,文件状态
git status
注释:
modified: 已经跟踪文件
deleted: test.txt 本地已经删除文件
LICENSE 已经add文件,但未提交跟踪

在这里插入图片描述
git add LICENSE 添加到缓存区域
在这里插入图片描述
回滚提交信息
git reset HEAD 《files_name》
git reset HEAD readme.md
在这里插入图片描述
注意:
如果工作目录的文件进行了修改,导致这个文件和暂存区域的对应文件不匹配了,两条建议:

使用 git add 命令将工作目录的新版本覆盖暂存区域的旧版本,然后准备提交
使用 git checkout 命令将暂存区域的旧版本覆盖工作目录的新版本(危险操作:相当于丢弃工作目录的修改)

我们都要操作add 再 commit,可以一步执行完毕,
1,git commit -am "change the readme.md file’’
添加了 -a 选项,Git 会自动帮你将工作目录中所有“已跟踪”的文件先 add 到暂存区域,然后再执行 commit 命令
在这里插入图片描述

六:三棵树之间的信息转换
本地init路径《==》缓存区域《=》git上
在这里插入图片描述
git add 命令用于把工作目录的文件放入暂存区域
git commit 命令用于把暂存区域的文件提交到 Git 仓库
git reset 命令用于把 Git 仓库的文件还原到暂存区域
git checkout 命令用于把暂存区域的文件还原到工作目录

七:git 用到命令
1,git log 命令查看历史提交
Author :提交者
Date:提交日期
提交注释
在这里插入图片描述

2,reset 快照回滚
git reset HEAD-从git回滚到缓存区即第二棵树。
注:HEAD 表示最新提交的快照(31f46),而 HEAD~ 表示 HEAD 的上一个快照(d19e3),HEAD~~(00c29)则表示 HEAD 的上上一个快照,后面可以一直加~~~~~~~~~~~~,10个“ ~ ”用HEAD~10表示。

–soft 选项


git reset --soft HEAD~ 命令就相当于只移动 HEAD 的指向,但并不会将快照
回滚到暂存区域,相当于撤消了上一次的提交(commit)

–hard 选项

git reset --hard  HEAD~ 
不仅移动 HEAD 的指向,将快照回滚动到暂存区域,它还将暂存区域的文件还原到工作目录

总结:
reset 回滚快照三部曲

  1. 移动 HEAD 的指向(–soft)

  2. 将快照回滚到暂存区域([–mixed],默认)

  3. 将暂存区域还原到工作目录(–hard)

回滚指定快照

git reset ID(00c2929)
id一般只要输入前几位(5 位或以上吧)就可以了

回滚个别文件
git reset 快照 文件名/路径
它就会将忽略移动 HEAD 的指向这一步(因为你只是回滚快照的部分内容,并不是整个快照,所以 HEAD 的指向不应该发生改变),直接将指定快照的指定文件回滚到暂存区域

往回滚,往前滚!
git reset --hard 7ac6788cdd9d49ca

在这里插入图片描述

reset --hard 将工作目录回滚到了某个版本 ,就后悔了!
git reflog
在这里插入图片描述
Git 偷偷记录下了你每一次的操作,第一列就是每次执行完命令,HEAD 指向的版本 ID 号!!!!

3,git diff 命令 :版本内容比较
git diff 有两个主要的应用场景。

尚未缓存的改动:git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动:git diff HEAD
显示摘要而非整个 diff:git diff --stat

 git diff test.txt

注释:
git diff 文件名
index 2f493fa..4c35974 100644
文件的 ID :左边暂存区域,后边当前目录
--- a/test.txt:---表示该文件是旧文件(存放在暂存区域)
+++ b/test.txt:+++ 表示该文件是新文件(存放在工作区域)
@@ -16,4 +16,5 @@ :头和结束,中间的“-”表示旧文件,“+”表示新文件,后边的
数字表示“开始行号,显示行数”
\ No newline at end of file : Git 出于善意的提醒:文件不是以换行符结束,
**最后空一行是一个良好的编程习惯**

在这里插入图片描述
备注:如果对比内容过多,会出现: 忽略下面就需要手动翻页信息自主查看
移动命令
“ :”

跳转命令
j 按键 : 向下移动一行
k 按键 : 向上移动一行
f 按键 : 向下一页
b 按键 : 向上一页
g 按键 : 第一行 ,先输入数字 3,再按下 g,表示去到第 3 行
G 按键 : 最后一行

搜索命令
斜杠(/ ) :从当前位置向下搜索
问号(?) :从当前位置向上搜索

比较两个历史快照

git diff ID ID2

比较当前工作目录和 Git 仓库中的快照
对比当前目录直接跟快照ID即可

git diff (ID)ed3708c

比较暂存区域和 Git 仓库快照
git diff --cached

4,提交、删除、重命名
修改最后一次提交

git commit --amend -m "新的提交说明"
此处不加-m 提交时候会有提示 加备注,如果不需要修改,请按下快捷键 
Shift + z + z(其实就是连续两个大写 Z)来退出,或者可以按下冒号(:),
然后输入 q! 退出。

删除文件
本地文件内误删除
在这里插入图片描述

git checkout -- test.txt
会恢复本地文件

在这里插入图片描述

删除文件

git add * : ’ * ‘添加本地所有文件到缓存区
git commit -m ‘错误信息提交了’ :提交缓存区到仓库
git rm worongting.txt :删除工作目录文件
然后:
git reset --soft HEAD~ 命令将快照回滚到上一个位置,然后重新提交 ,Git 就不会再提worongting.txt的事儿了
注意:rm 命令删除的只是工作目录和暂存区域的文件(即取消跟踪,在下次提交时不纳入版本管理)

在这里插入图片描述

有种情况大家可能都会遇到过,当本地目录和缓存区都有相同文件时,而且内容不相同时
git rm test.txt 命令,Git 会下意识地阻止我
在这里插入图片描述
git rm -f test.txt 强制目录文件和缓存区删除。
git rm --cached test.txt 只删除暂存区域的文件

重命名文件
我们直接更改本地文件,出此提示。
在这里插入图片描述

git mv test.txt  new_test.txt

在这里插入图片描述
注意:
mv 命令相当于执行下边三条命令:

ren game.py wordgame.py
git rm game.py
git add wordgame.py

注:Windows 使用 ren 命令修改文件名,Linux 是使用 mv 命令……

可以设置一些自己主动需要git忽略的文件

cmd命令新建.gitignore 文件
echo *.temp >>.gitignore
echo temp >>.gitignore
echo .gitignore >>.gitignore

在这里插入图片描述
八:git branch 创建分支
git branch 分支名:创建分支

HEAD -> master, test2:表示有两个分支,主分支(master)
在这里插入图片描述

精简版”的方式显示,可以加上一个 --oneline 选项(即 git log --decorate --oneline),这样就只用一行来显示一个快照记录
在这里插入图片描述
九:git checkout 切换分支
git checkout test2
HEAD -> test2:默认指向了test2
在这里插入图片描述
git log --oneline --decorate --graph --all
–graph 选项表示让 Git 绘制分支图,–all 表示显示所有分支

十:合并和删除分支
git上一般分支情况
在这里插入图片描述
合并分支
git merge test2 :合并分支到master上
在这里插入图片描述

删除分支
git branch -d 分支名 :git branch -d test2
在这里插入图片描述

分支消失在这里插入图片描述
git merge --no-ff test3
merge 的时候使用 --no-ff 选项即可告诉 Git 不要使用 Fast-forward 方式合并分支,Git 就会乖乖地使用三方合并(Three-way merge)
这样就算删掉了“test3”分支,我们仍然可以很容易看出有个分支曾经存在过

匿名分支
git checkout HEAD~ :未对分支命名,即git给你创建了匿名分支,可以正常操作,一旦切换到其他分支,此分支就会消失。
checkout
a>从历史快照(或者暂存区域)中拷贝文件到工作目录
b>切换分支

定某个文件名时,Git 会从指定的提交中拷贝文件到暂存区域和工作目录, git checkout HEAD~ README.md 操作的时快照
在这里插入图片描述

令中没有指定具体的快照 ID,则将从暂存区域恢复指定文件到工作目录(git checkout README.md),对缓存区域操作
在这里插入图片描述

额外话:
1,Git 管理的文件有三种状态:已修改(modified)、已暂存(staged)和已提交(committed)
git add * 把工作目录全部文件加载到缓存区

2,SVN 迁移至 Git 的工具:
https://github.com/nirvdrum/svn2git

3,gitignore 语法规范-正则

.gitignore 可以使用标准的 glob 模式匹配(glob 模式是指 shell 所使用的简化了的正则表达式):

所有空行或者以注释符号 # 开头的行都会被 Git 忽略;
星号(*)匹配零个或多个任意字符;
[abc] 匹配任何一个列在方括号中的字符;
问号(?)只匹配一个任意字符;
[a-z] 匹配所有在这两个字符范围内的字符;
匹配模式最后跟反斜杠(/)说明要忽略的是目录;
匹配模式以反斜杠(/)开头说明防止递归;
要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反

4,Git 工作流程及分支

Git 工作流使用一个中间仓库作为所有开发者的交流地点,开发程序的小伙伴在本地工作,然后将各自的分支推送到中间仓库
开发分支(develop)
在这里插入图片描述
master 主分支通常只是用于对外发布项目的新版本,日常开发应该在另一条分支上完成。我们把开发用的分支叫做 develop 分支

功能分支(feature)
在这里插入图片描述
每一个新功能应该使用单独一个功能分支进行开发,功能分支应该从开发分支中分离出来,功能开发完成后合并到开发分支。

提示1:功能分支不应该跟 master 分支有任何交流。

提示2:功能分支可以采用 feature-* 的形式命名。

预发布分支(release)
在这里插入图片描述
在项目正式发布之前,你可能需要一个预发布的版本进行测试。于是你可以从开发分支中分离出预发布分支,用于内部或公开的测试。

提示1:预发布分支应该同时合并到主分支和开发分支中。

提示2:预发布分支可以采用 release-* 的形式命名。

维护分支(hotfix)
在这里插入图片描述
项目正式发布后难免会出现 bug,这时就需要创建一个分支,进行 bug 的修补。

提示1:维护分支应该从主分支中分离出来,bug 被修补后,再合并到主分支和开发分支中。

提示2:维护分支可以采用 fixbug-* 的形式命名。

常用分支
主分支(master)和开发分支(develop),功能分支(feature)、预发布分支(release)和维护分支(hotfix)属于临时分支,用完之后应该及时删除。

5, Git 的两种合并方式

a>Fast-forward ==》git merge test2 方式合并到master上
b>Three-way merge 三方合并
即2个分支同时合并到主分支并解决冲突的!!!!
在这里插入图片描述

图片中 C3 和 C4 的共同祖先是 C1,可以看到 C3 和 C4 分别增加了 test2.py 和 test1.py 两个文件。因为对比之后发现三者并没有冲突,所以 C5 应该是三者的合体;
Git 这种合并方式也适用于同名文件的不同更改。

6,git checkout – README.md
– 作用:README.md 为文件,并非名为README.md 分支
git checkout 373c0 把快照拿到缓存和目录文件
在这里插入图片描述
7,checkout 命令和 reset 命令的区别
checkout 命令和 reset 命令都可以用于恢复指定快照的指定文件,并且它们都不会改变 HEAD 指针的指向
区别:
reset 命令:
只将指定文件恢复到暂存区域(–mixed)
移动 HEAD 所在分支的指向
checkout 命令 :
同时覆盖暂存区域和工作目录
只会移动 HEAD 自身来指向另一个分支

在恢复文件方面,reset 命令要比 checkout 命令更安全一些,因为 checkout 命令在切换分支前会先检查一下当前的工作状态,如果不是“clean”的话,Git 不会允许你这样做;而 reset --hard 命令则是直接覆盖所有数据。

GitHub教程链接 :
https://blog.csdn.net/weixin_42914706/article/details/113965004

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐