友情提示:由于本人是Mac,所以下面的安装以及具体操作都是按照Mac系统来进行了,win系统的朋友们可以另找资源了。此外特别感谢莫烦的教程,网站见:
莫烦Python零基础入门机器学习不是一件困难的事. 机器学习或者深度学习本来可以很简单, 很多时候我们不必要花特别多的经历在复杂的数学上.数学只是一种达成目的的工具, 很多时候我们只要知道这个工具怎么用就好了, 后面的原理多多少少的有些了解就能非常顺利地使用这样工具.https://mofanpy.com
一、git的安装
直接点击进入官网根据系统的版本选择合适的git进行安装,安装过程并不复杂,基本上是傻瓜式安装。Git - Downloadshttps://git-scm.com/download/
二、安装之后需要进行简单的操作
1、首先创建一个文件夹,即版本管理仓库(gitTUT),文件夹是用于收集需要的代码。打开terminal终端(此终端需为linux或unix系统下的终端,例本人为Mac,则为bash终端),进行一些配置:
cd ~/Desktop cd gitTUT git config --global user.name "XXX" git config --global user.email "XXXXXXX@qq.com"
2、对文件夹进行初始化,输入以下代码:
git init
此时这个init文件在Mac中属于隐藏文件(win系统中可以直接打开文件夹查看) ,如果Mac系统也想查看,输入:
git ls -a
2、打开git文件,添加一个命名为1的python文件。
open .git #打开git初始文件 touch 1.py #创建文件
此时就创建好了1.py文件,可以直接在文件夹中查看(此处的添加文件也可以直接图形式操作)
3、查看文件1.py的状态
git status
可以看到此时文件状态为untracked,一般情况下untracked即为文件还未add进git仓库,git也将无法识别,add之后文件状态有unmodified和modified两种情况,这两种情况也被统称为unstage,当commit之后,文件就变成了stage状态。
4、将文件添加进入git仓库,此时状态变为unstage。
git add 1.py git status #查看状态
5、查看工作日志确定文件修改的进程。
git log
这一部分显示文件还没有commit过,所以是没有git的日志。这也提醒我们git的日志是关于commit 操作之后的内容,所以每一步完成都要commit提交一下。
6、进行commit操作
git commit -m "create 1"
图片里显示的是create 1.py,这里没有关系,因为这是方便我们去分每一次修改版本的名称,所以如何命名都没有问题。
此时我们再查看一下日志会发现日志中有了记录
到目前为止一套基础的git操作就已经结束了,我们可以看到从untracked - unstaged - stage状态的过程。下面假设我们要在1.py的空文件中添加代码之后如何操作呢?
在1.py文件中我们先输入以下代码,再进行保存。现在再查询1.py的状态,我们可以看到显示为modified,代表已被修改过。
a = 1
修改之后的代码需要保存之后重新add进入git 仓库变为stage状态,然后commit提交信息:
git add 1.py git commit -m "change 1"
注意:上面两句代码其实也可以简化成,但前提是1.py已在之前放入git仓库(即之前有过add操作):
git commit -am "change 1"
之后我们再查看git日志,可以发现发现有两条记录change1和create1:
到此修改就已完成✅
那么如何看之前的所有修改记录呢?
首先再次对python文件进行修改:
a = 2 b = 1
此时输入命令,查看文件的状态:
git status -s #和之前只输入一个status相比,这个表示的是缩写
这里可以看到我们已经对文件进行了修改后。查看前后修改的内容的不同(这里的前后指的是upstage状态和commit的对比):
git diff #diff表示的是upstage状态和commit的对比
此时修改后我们不要忘记对文件进行add操作吧,使其变为stage状态。
git add . #表示对所有文件add git add 1.py #表示只对1.py文件进行add,因为我们现在只有1.py这一个文件,所以两个命令行任选其一即可
如果我们再查询当前文件修改后的不同,就发现并没有任何不同,因为此时文件已经进入了stage状态,并未upstage状态。
所以这时我们需要用以下命令行来看此时stage状态和上一个commit状态的不同
git diff --cached
还有一个方法可以同时看stage状态和unstage状态,由于刚刚修改后又变成了stage状态,所以我们现在要对代码再次进行修改:
a = 2 b = 1 c = b
此时输入查询状态的命令行,我们可以得到以下结果:
第一个绿色M为stage状体啊,第二个红色M为upstage状态(即加入c=b后的状态),要查看这些状态的修改需要输入以下命令行:
git diff HEAD
可以看出前面三个为stage的改变,后面一个为unstage的改变。如果输入--cached就仅仅会显示stage的变化,如果只输入diff会显示unstage的状态:
此时修改全部完成,切勿忘记进行add和commit操作
git add . git commit -m "change 2"
现在已经学会了如何修改、保存提交状态和查看前后区别,那如果想回到之前版本的代码该如何操作呢?
下面我们首先回顾一下之前产生的几条记录,查看记录直接输入查看日志的命令行:
git log --oneline #这个可以以行的形式简明输出每一条记录,方便查看
A.下面复制粘贴一个1.py的文件并命名为2.py,如果说之前在做change2的时候,忘记了加入部分内容(文件2.py),想要在补上这个文件的同时不改变记录状态则要输入以下命令行:
git add 2.py #将新建的python2文件添加进入仓库 git commit --amend --no-edit #在保持change2状态的同时对python2不做任何改变,并commit
但此时要注意change2 的id发生了改变。
B.那如果修改完成add之后,我后悔add了,还想继续修改,如何操作呢?
下面我先对1.py进行修改,并将其add,查看他的状态是已经stage:
a = 2 b = 1 c = b d = 3
此时python1文件已经进入了stage状态,我们想让他重新回到modified,则需要输入以下命令行:
git reset 1.py
除此之外还有一种方法可以回到unstage状态,且这个方式更好用。首先先看一下此时的工作日志,让python1文件进入stage状态(即add操作)
在工作日志中可以看到每一个commit记录的代码,Head为指针,我们只需要让指针指向谁,状态就回到哪个部分,例如:
git reset --hard HEAD #HEAD~1表示前一个,HEAD~N表示前N个
此时表示在change2;如果回到change1,则为:
我们看到记录也发生了改变,只有两条记录了,那我们如果想看到全部的记录,则需要输入:
git reflog
这样也可以到change2的commit了。
到目前为止都是对commit进行的操作,那如果我想回到之前的文件状态呢?
首先要熟悉每一个commit的ID,查看log即可明白:
下一步就是如何用命令行实现回到哪一个版本的文件,比如要回到change1版本的文件,则需要:
git checkout 2d9b10d -- 1.py
此时就会发现文件代码发生了变化,变成了只有a=1 ,那我们回到过去肯定是想再进行进一步的操作,所以此时在代码变成这样:
a = 1 # I went back to change 1
修改后我们再对它进行add以及commit操作,并查询log:
git add 1.py git commit -m "back to change 1 and add comment for 1.py"
可以发现记录增加了,文件修改了,但是change2本身的代码是没有任何变动的,这即为checkout和reset的区别。
一个代码可能不止有master一个分支,还有管理人员的devlope分支,所以如何使用git操作这些分支(branch)也是一个很重要的问题。比如开发版的分支用于新思路的开发,可能不太稳定,但是用户版本的分支很稳定,当开发版本的代码完善稳定后就可以合并到用户版本,用户就也可以看到代码全新的改变了。
现在我们先看一下全部的记录,这里我们用graph的形式,可以看到前面的小星号:
git log --oneline --graph
下面我们再进行建立新的分支的操作,建立新分支有如下两种操作:
方法一:
git branch dev #建立Dev分支 git branch #查看分支情况,前面的星号表示谁是主分支
如果想让dev变成主分支,则只需要使用checkout进行命令:
git checkout dev
方法二:
我们需要切换回master主分支,然后删除dev分支,再用第二种方法重新建立dev分支。删除dev分支用:
git branch -d dev
新建一个新的分支为:
git branch -b dev
此时我们再修改一个python1 中的文件并add,commit
a = 1 # I went back to change 1 # I was changed in dev branch
我们再切换回mater分支中,此时如果开发已完成,我们想把开发版本的内容和客户版放在一起:
git merge --no-ff -m "keep merge into" dev
此时根据图像我们看到了分支之间的融合。
在实际操作中还会出现两个分支都发生改变的情况,在合并的过程中可能会发现分支冲突,那我们如何解决这些问题呢。
首先我们需要有两个分支:master和dev,原始python1文件的代码为:
a = 1 b = 2
在master分支下我们修改原始代码为:
a = 1 b = 2 # edit in master
在dev分支下我们修改原始代码为:
a = 1 b = 2 # edit in dev
查看记录之后,我们也可以看出这两段代码在之前的记录均一致,只有在两个分支的过程中发生了不同的修改。此时我们如果合并dev可以发现终端中报出了conflict冲突,而且在python1 文件中也有体现。
这个时候我们点进去python文件,将文件修改为:
在终端中输入:
git commit -am "solve conflict"
可以看到以下内容:
下面要说到一个和merge一样用于处理分支冲突的rebase。源文件仍然和上面的例子一样。只不过这次我们不用merge,而是用rebase。
rebase的原理其实是将主分支上的修改先放到一个另外的空间,在基于dev分支上的修改后插入形成新的形式。
首先输入命令行:
git rebase dev
同样如上在python文件里修改内容,我们可以看一下branch现在的内容
可以看到主支不在dev和master中的一个,而是分配给了其他空间(rebasing master),这也证明了刚才rebase的原理。
这时要add修改后的python1文件,并且继续rebase的进程,输入以下代码:
git rebase --continue
可以看出主支的edit in master是插在edit in dev后面,而且要注意此时的edit in master和之前的edit in master的ID并不一样。
有些时候当你在开开心心敲代码的时候,突然老板说要让你在现有的代码文件上再实现完成一个功能,那此时你并不想将现在的修改和老板给的任务混在一起,这时就需要“临时修改(stash)”这个方法了。
现在我们要用的文件还是刚才的文件,进入dev分支后发现现在的代码是:
此时假设我们在按照自己的思路修改代码,则代码修改为:
这时老板一通电话打过来,让你按照他的思路去修改,于是你只能先把你修改的部分内容放在一个暂存区空间中:
首先查询现在的状态,还是一个unstage状态:
放入暂存空间的命令行:
git stash
放入暂存空间后再次查询状态发现没有了任何反应:
此时我们再创建一个属于老板任务的分支:
git checkout -b boss
将代码修改为以下内容,并对代码进行add 和 commit:
下一步重要内容就是将boss分支和主支进行合并,此时会有confic冲突,和之前一样将代码改变,再进行solve conflict
最后我们可以返回dev的分支,继续进行自己的修改:
git checkout dev #返回dev的分支 git stash pop #提取暂存空间的内容继续进行修改
可以看出这个时候的python1文件的状态为:unstage. 继续进行修改即可。
最后如何和github联系,即输入下面命令行:
git remote add origin https://github.com/MarsGemini/git-demo.git #后面为GitHub上建立的仓库地址 git push -u origin master
关于后面如何再对一些问题进行修复,详见这篇文章,里面说的很详细,本人的问题也得到了解决:github开发人员在七夕搞事情:remote: Support for password authentication was removed on August 13, 2021._星空-CSDN博客
以上,终于结束了这一段的内容!本人也是初学小白,仅仅是为了记录学习笔记,防止忘记之后还得重新翻视频资源。如果有任何不对的地方欢迎各位指正,在此基础上如果可以解决各位的问题当然是我的荣幸哈哈哈哈



