0


Git一篇文章搞定

前言:本来Git是大二上学期一个水课【软件工程】要学的,说重要吧感觉也不是很重要,反正水课我就没学,但是后来我去云南旅游,我一个装了电脑的背包被人偷了,真是操蛋了,所有代码、笔记全部不见,我真的心梗,然后才了解到Git可以把我的代码上传到远程仓库,那就还是学一下以防万一吧

不会讲得太复杂,只用会上传代码,会用就行,下载按照那些比较简单,我不想花时间去截图、解释,自己上网跟视频安装就行,这里直接讲怎么用

先补充一下一些常用的cmd命令语句

大家都知道有的时候编程课会教【win+R】会弹出命令控制台,输入【cmd】,就可以开始进入命令操作了,那么有哪些常见的命令操作?不多记,记几个有用的就行:

一般来说就这几个操作:cd进入、dir显示内容、cls清屏

1、换磁盘目录:最简单,大写磁盘加“:”,比如D:按回车即可

2、进入某个文件目录或文件夹目录:cd ......

(1)cd 文件夹或文件名 ——> 一级一级地打开

(2)cd .. ——> 一级一级地返回上一级

(3)cd 文件夹\文件夹...\文件.后缀 ——> 多级目录一次性打开

(4)cd \ ——> 直接退回到磁盘

3、新建文件夹:mkdir

3、查看目录下所有文件:dir

4、太多了,清屏:cls

5、exit退出

6、然后结合git,大部分命令都是一样的

要进入某个目录无非就是【cd 路径】,创建文件夹【mkdir 文件名】,进入目录就【cd 目录】,返回到开头就【cd..】一级一级回退,要注意的是,git里面查看当前文件目录用【ls】,查看当前隐藏文件目录【ls -a】,查看当前文件全部信息【ls -al】, 查看具体组成部分【ls -alter】,git的清屏是【clear】

然后一般一个git仓库文件夹主目录会显示【master】,其他linux系统好像是显示main

一、创建仓库

首先创建仓库有两种方式:

1、自己创建本地仓库:git init

用【ls】命令可以查看文件目录,但是由于git仓库是个隐藏文件,所有要用【ls -a】查看,照做就行

【ls -alter】则是查看git仓库的组成部分信息

【值得注意的是】

如果是直接git init,后面没有带别的东西,那么就是在当前目录创建.git仓库文件

如果git init后面还带了别的单词,那么就是在当前目录再创建这个单词为名字的文件夹,然后在这个文件夹里创建.git文件

2、克隆网上的:git clone,从GitHub或Gitee上获取

这里我暂时展示克隆https的远程仓库url,不太推荐这种方式,GitHub基本已经取消了这种连接仓库方式,有兴趣可以先看看,具体的内容我会在【八、远程仓库——GitHub】详细讲到,精华也在这,可以直接跳到这看。

克隆https的远程仓库就是直接 【git clone 仓库网址(https的,ssh的url需要配置)】即可,但是我的操作老是报错,目前还没找问题解决方法,正在求问中,其他成功的兄弟们可以参照这个b站博主的视频截图看看一不一样,案例网址:GitHub - geekhall-laoyang/remote-repo: My first repo.My first repo. Contribute to geekhall-laoyang/remote-repo development by creating an account on GitHub.https://github.com/geekhall-laoyang/remote-repo.git

(这里兄弟们复制粘贴网址时会发现git不能Ctrl+c\v,git的复制快捷键是Ctrl+Insert,粘贴键是Ctrl+Insert,要是不行就右键点Options——>找到Keys——>选择打勾“Copy and Paste”,然后再试试)

网上有的博主说解决这个问题的方法是如下,可以试试,反正我试了没用:

**解决方案一 **

1、看看你的git配置

git config --global -l

如果你没有任何与https代理相关的内容,例如https_proxy = ...问题不在这里。

如果您有与https代理相关的内容,请将其从〜/ .gitconfig文件中删除,然后重试。

2、如果仍然不起作用,请取消设置环境变量

env|grep -i proxy

你应该有一行或几行https_proxy = ...

使用以下内容逐个取消设置:取消设置https_proxy(或HTTPS_PROXY,具体取决于变量的名称)

3、再次检查环境变量

env|grep -i proxy

如果它没有显示任何你应该是好的。

注意:此解决方案可以应用于http和https代理问题。只是变量名称从https更改为http。

** 解决方案二**

在开启shadowsocks的前提下,手动配置git的代理。git客户端输入如下两个命令就可以了。

git config --global http.proxy http://127.0.0.1:1080

git config --global https.proxy http://127.0.0.1:1080

http://也可以改成sockets5://,但是区别在于:socks5不支持通过pubkey免密登录github,每次提交代码只能输入用户名和密码。http可以支持免密登录。

取消代理:

git config --global --unset http.proxy

git config --global --unset https.proxy

二、git的工作区和文件状态

1、git工作区

git工作区分为三个:【工作区】Working Directory、【暂存区】Staging Area/Index、【本地仓库】Local Repository。

【工作区】就是.git所在目录,进行修改等操作的区域(.git所在目录)

【暂存区】就是中间过渡区域,用于临时存放即将提交或修改的内容(.git/index)

【本地仓库】就是git存储代码和信息的主要位置(.git/objects)

文件“运输”到本地仓库的流程:【工作区】生产、修改—(git add)—>【暂存区】暂存—(git commit)—>【本地仓库】提交成功就到了这里

2、文件状态

【未跟踪Untrack】新创建的,还没被git管理起来的文件

【未修改Unmodified】已经被git管理,但是文件内容还没发生变化

【已修改Modified】已经修改了内容,但是还没放到暂存区

【已暂存Staged】最后修改完并放到暂存区的

【未跟踪】git add——>【未修改】—>【已修改】——>【已暂存】

3、查看【工作区】和【暂存区】的文件

查看【工作区】的直接【ls】

查看【暂存区】的是【git ls-files】

查看文件里是啥内容是【cat 文件名】

修改文件内容是【vi 文件名】

三、如何添加、提交文件

1、【git status】查看仓库状态

看下面例子,我刚刚新建的一个仓库,因为还没有做任何操作,里面没有文件(红色那个是我上面案例里在这个目录新建的另一个git仓库),所以它提示我啥也没有,需要git add <file>添加文件

现在我用【echo】指令创建一个文件并同时在里面输出一个字符串

(这里解释一下echo命令:

Echo :显示当前ECHO的状态:ECHO ON 或者ECHO OFF 。

ECHO ON :ECHO状态设为ON,将显示命令行(如每行前的C:>等类似标志)。

ECHO OFF:CHO状态设为OFF,将不显示命令行(如每行前的C:>等类似标志) 。

ECHO 字符串 :将输入的字符串显示在CMD屏幕上。

ECHO 字符串 &ECHO 字符串 … :&,类似and的意思,逻辑运算,用来显示多行数据。

ECHO 字符串 > 文件路径和文件名:将字符串写入文件中,若已有数据将先清空后写入。

ECHO 字符串 >> 文件路径和文件名 :将字符串写入文件中,若已有数据将追加到末尾。

这里我将新建一个file1.txt文件,并把这个字符串“这是第一个文件”写入这个文件

然后再来看看现在仓库的状态:已经多了一个【file1.txt】文件

但是现在它处于【未跟踪】的状态

2、【git add】

【git add】命令就是把文件放到【暂存区】“小货车上”

然后再看一下仓库状态

可以看到file1.txt从红色变成了绿色,说明已经添加到【暂存区】,然后还有一段提示语提示可以用这个命令(git em --catched 文件名)可以再将文件从【暂存区】拿出来

还可以通过通配符来一次性添加多个文件到暂存区,【*文件后缀】意思是把该类后缀的文件一次性都添加,【.】意思是一次性把所有文件都添加了

例子:现在有这么多个文件(红色的)

把txt后缀的文件都添加到【暂存区】了

然后可以看到.txt文件都变绿了,就是添加成功

再试试【.】全部添加

3、【git commit】

使用【git commit】命令可以直接将【暂存区】的文件提交到【本地仓库】保存起来

提示:这里会有个小bug,有的人提交会提示这个结果:

说明你虽然把代码拉下来了,但是在推送代码时不知道你是谁,所以需要执行两行命令,告诉它你是谁(仔细看上面图片内容,其实有 Run 提示,跟着提示操作就行)

//分别执行
git config --global user.email "你的邮箱"
 
git config --global user.name "你的名字"

然后再执行commit命令,就可以提交成功了;

然后我们先不带参数试一下commit,可以看到会进入到一个vim编辑器的交互式页面

我们怎么摁都没反应,不要慌,摁“ i ”进入“编辑模式”

然后上下键可以移动,我们再第一行可以数据提交记录,然后摁【Esc】,在底部输入【:wq】再摁回车,就保存退出了

(如果这个办法失效了,那么就试试这个:摁【Esc】,然后摁两次大写的“Z”,就保存退出了)

然后就提交成功了

如果带上-m这个参数,还可以自定义一个“字符串记录”,一起存入【本地仓库】,例子:

看一下仓库状态,成功了

另外,通过【git log】也可以查看到我们刚才的提交记录

还可以用【git log --oneline】查看更简洁的提交记录

四、回退文件以前的版本【git reset】

需要解释一下版本是什么?我刚学的时候一头雾水啥版本?

举个栗子,我分别依次将三个文件添加并提交,那么版本1就是刚添加并提交了第一个文件,版本2就是提交了第一个文件还提交了第二个文件,版本3就是在提交了第一个、第二文件基础是再提交了第三个文件,那比如我现在想不提交第三个文件了,想拿回来清空里面的内容,那么我就回退到第2版本就行了,简单来说版本就是做了某个操作

使用【git reset】命令可以推回到以前的版本,它有三个参数可以搭配,下面是对应的三个效果

这部分我也不打算研究太深,感觉用的不多

有一个提一下吧,如果我们误操作了一下,后悔了咋办?可以通过【git reflog】来回溯查看之前的操作记录,然后找到操作之前的版本号

然后用【git reset --参数 版本号】就可以回退到这个版本

五、【git diff】检查工作区和暂存区的文件差异

我们提交完文件不是代表【工作区】、【暂存区】的文件就没了,还是在那的,就相当于你把你的文件上传到了百度网盘,但是你的电脑还是有这个文件的,你还可以再在电脑对这个文件再做修改,但是修改完之后,你电脑的文件肯定就跟你上传到百度网盘的文件不一样了,怎么就查看差异呢?

比方说,我现在把一个文件里的内容改了,还没有添加到【暂存区】

然后再用【git diff】看一下,就能发现我工作区和暂存区的这两文件的区别

那么现在再把它添加到【暂存区】,相当于上传并覆盖到百度网盘,那现在两边就没有区别了

然后比较【工作区】和【仓库】用【git HEAD】

比较【暂存区】和【仓库】用【git diff --cached】,我懒得截图示例了,知道就行

六、删除

细节真鸡儿多,我顶不住了,window直接找到文件夹,找到文件删除就行;然后那个啥Linux系统的,看这个图片吧

七、忽略文件

这个也简单带过,自己简单了解一下就行

就是git里有一个特殊文件叫.gitignore,就是commit提交的时候不会被提交到【仓库】的文件

有这些不应进入到【仓库】

那要怎么做?简单说,你想把哪个文件不要被提交,你就【echo 该文件 > .gitignore】就执行这个命令就搞定了,此时【工作区】就会多个gitignore文件,但是原来那个文件就看不到了,此时不管是git add .还是git commit都不影响了

八、远程仓库——GitHub

也就是GitHub或Gitee了

1、注册GitHub账户

首先先注册一个账号,进入GitHub官网,注意因为是歪果仁的网址,恐怕各位要“范强”(我不这么说不让过的)才能打开,可以试一下登录 — iKuuu VPN

然后建议用谷歌浏览器打开,然后把那些英文提示语都右键翻译成中文,一步一步操作就行,有手有眼就行,我视频教程都没看,选免费free的账号注册就行

2、创建在线远程仓库

然后怎么创建我们自己的仓库?

第一步,点左上角头像

第二步

第三步

第四步

第五步

第六步

第七步

第八步

因为我们还没学什么分支、push,先简单看看

3、把在线远程仓库克隆到本地

然后注意这里:上面有两个按钮:代表不同的链接两个库的【链接】方式,推荐用SSH,HTTPS需要什么账户密码蛮烦的

我们复制这个URL,回到git试一下git clone一下

可能会有这个提示,没有问题,照它提示输入“yes”继续就行

然后可能会出现两种报错

1、本人是window系统,然后我的报错是这样

警告:已将“github.com”(ED25519)永久添加到已知主机列表中。git@github.com:权限被拒绝(公钥)。致命:无法从远程存储库中读取。

这种错误是因为密钥匹配不对,因为我们第一次匹配,还没有密钥,可以用这个命令检查一下【ls ~/.ssh】,显示这样就是我们没有密钥

那么只需要输入这个命令【ssh-keygen -t ed25519 -C "随便一个邮箱"】(邮箱名称可随便填写)

后面一直“回车”,使用默认设置,直到出现下面这样的效果:

现在我们再用这个命令检查一下【ls ~/.ssh】我们的密钥生成成功了没有,会发现这样两个文件

第一个是我们的【私人密钥】,谁也别告诉;

第二个后缀是.pub的文件是【公共密钥】,用它来连接仓库

现在我们用这个命令【cat ~/.ssh/你的公钥文件名字】或者【vi ~/.ssh/你的公钥文件名字】打开【公钥文件】,把它的内容复制了

然后回GitHub页面,点击右上角

Title输入任意名字

现在这样就成功了

2、我看一个b站up主的视频是这样报错的,其实也是因为没有匹配密钥导致没有权限,我截了图各位有一样的可以照着这个方法也可以成功

怎么搞?看好,配置SSH密钥,进入【.ssh目录】(window进入.ssh目录,要输入【cd ~./.ssh】)

然后用【ssh-keygen -t rsa -b 4096】命令

如果是第一次配置,还是像我们刚才那样一直直接回车即可,它会在用户根目录的.ssh目录下生成一个id_rsa的密钥文件

如果不是第一次配置的,先别回车,输入一个新文件名,然后再回车,会这样

然后有设置密码就输入密码,没有就不管回车就行,密钥生成就成功了

然后注意,还是这两文件,前面讲过了

我们需要用【vi 文件名】或者【cat 文件名】命令打开里面,复制所有内容,

然后就是回GitHub页面,一样的操作,最后显示这样结果就是成功

然后如果不是第一次配置的伙计们还有一步要做,因为刚刚我们随便指定了一个新的文件名(比如刚刚图片里的test),那我们需要执行以下这个命令【tail -5 config】,这个配置的意思是,当我们访问GitHub的时候,指定使用ssh目录下的“这个新文件”的密钥

现在我们再次克隆远程仓库:git clone 刚刚ssh的url,会发现报这个错:warning: You appear to have cloned an empty repository. 意思是:这是git在提示clone的仓库是一个空仓库,没有什么太大影响,在本地依然可以看到有这个仓库。不是报错,可以正常使用。

那么如果它这样,那就是说明要输入密码,这种情况是可能有的时候创建密钥的时候要创建密码,密码就是刚刚创建密钥的时候创建的密码,【那么如果你在创建时没有创建密码,也直接回车即可】

现在我们找到目录文件夹,会发现多了一个文件夹,这就是克隆远程仓库成功了

然后这里跟我的步骤一步一步操作到这都一模一样的兄弟们发现问题又又又又又来了!人家的克隆仓库名字是正常这样的

咱们的克隆仓库名字是这样的

跟我一样的兄弟们注意,不论是【cd -】还是【cd -/】都是错,【-】就是特殊字符,要进入特殊字符名字的文件夹,得在名字前加上一个【./】,比如这个案例就是【cd ./-】

4、尝试把【本地克隆的仓库】加入文件,然后传送给【线上远程仓库】

(1)、传给【远程仓库】

现在我们还是按照老方法,添加、提交,现在文件已经提交到了【克隆的本地仓库】

但是注意!!远程仓库和本地克隆仓库还是两个独立的仓库,你在本地仓库保存的文件并不会影响到远程仓库,那么要让本地仓库的文件真真正正传到远程仓库,还需要下面这两命令

【git push】就是把本地仓库的修改拉到远程仓库

【git pull】则反之,把远程仓库的修改拉到本地仓库

我们试一下【git push】,然后回到GitHub刷新一下,就会发现卧槽成功了!!

(2)、【远程仓库】关联已存在的【本地仓库】

上一个是把【远程仓库】直接克隆到本地,然后互相关联、传输;现在是直接把已有的【本地仓库】与之关联

前面我们讲过GitHub回有三个种代码命令帮你连接仓库,我在这放回那个图片给大伙回忆

分析一下这三句话我们就可以把已有的本地仓库与远程仓库连接了

【第一句话】,【git remote add 远程仓库的别名 URL】这个命令是添加一个远程仓库,通常默认远程仓库的别名是【origin】,当然我们也可以自己改成别的别名

这里我又新建了一个叫Test的远程仓库,并在本地也创建了一个叫newGit的本地仓库,现在我进入到本地newGit仓库的主分支目录,然后使用【git remote add】命令来添加Test远程仓库

(抱歉这里我把origin打错了,所以它的别名被我变成了orgin,但是最好还是改成origin,不然后期很麻烦很麻烦很麻烦,要改的话就先删了这个错误关联添加【git remote rm orgin】,然后再重新添加【git remote add origin URL】)

【git remote -v】可以查看我们当前本地仓库关联的远程仓库的别名、地址:

【第二句话】,【git branch -M main】意思是指定分支名称为main,Linus系统的好像都是默认是main的可以不用管,Window的可以看到我们的都是master,有必要的可以改一下改成main,下面会解释为啥改

【第三句话】,【git push -u origin main】意思就是把【本地仓库的main分支】跟【远程仓库的main】分支关联起来(origin是默认的远程仓库的别名),其实这个命令完整是【git push -u orgin main : main】,如果本地仓库的分支跟远程仓库的名字相同的话就可省略后面的【: main】,所以为什么上面说咱们Windows用户要把master改成main,防止这里出错嘛;

(补充)

何为【分支】?你可以理解成以前学java、Ajax的时候学到的【线程】,git的主分支就相当于一个主线程,然后分支当作一些异步操作,比如团队大伙一起连接了git仓库代码,然后主分支稳定来传输数据、项目给工程师们使用,然后这个项目有些bug需要人维护,或者这个功能A需要调试修改、那个功能B又要改,但这些操作都不影响主分支传输数据,它们是各自不同的操作的【版本】,到时更新提交就行了(仅仅个人理解,有错误还请大佬指出)

简单了解一下,以后要进公司实操的话可以选择自己细学一下,这里我们的目的只是知道怎么传文件、怎么去文件就行了

然后这里我实际操作时发生这个错误

第一:先确保【本地仓库】必须要有至少一个文件commit了,如果没有没有文件经过git add ——> git commit这个步骤的话,你自己试试【git branch】(检查所有分支) 或者【git branch -a】(检查本地仓库的分支) 就会啥也没有

只有当我随便commit了一个文件之后才有了反应

第二:确保你这个main写对了,超级低级错误,我这个沙比改分支名字的时候改成了mian.....

成功的样子是这样

这时候我们用【git branch -r】检查【远程仓库分支】就会发现也有东西了

5、把【远程仓库】的东西拿到【本地仓库】

我们试一下在GitHub上做点修改,然后把新的文件拿到本地

比如这里,这个绿色按钮意思是在线上创建一个介绍我们这个远程仓库的文件

现在远程仓库已经更新了【README.md】这个文件了,我们试着把它拿到本地试试

完整写法是【git pull 远程仓库别名 分支】,后面可以省略,直接写【git pull】就行,省略的话就是默认拉取origin的main分支,跟本地仓库的main分支进行合并,执行完就成功了

总结

九、将VSCode的代码搞上去

在左边侧边栏会看到一个分支形状图标,点他,我忘了截图,第一次在这个文件夹创建仓库的话,他会提示你【当前目录未创建仓库,是否创建】,选择要提交到Git的文件,右键点击它,然后选择“添加到暂存区”。搞就完事!然后就会这样:

然后再设置里可以做这个设置,不然他会一直显示(U未跟踪的),跟着图片做

然后就会这样:全是绿色的A(就是已经放到暂存区,还未提交)

现在只需要在输入框输入【commit from vscode】,点击提交,ok

接着VSCode会自动弹出这个,点他!干他!这个就是自动发到GitHub上!

接着就会自动弹出要你登录、啥的,反正你就登录、选绿色按钮就完事,然后就搞定了!

哈哈哈哈得,原来VSCode可以直接在GitHub上创建一个仓库,并且直接传代码上去,我忒么白搞......哈哈哈白学前面那么多

铁子们,如果只是想把自己的代码上传GitHub的远程在线仓库的话,前面的都忘了吧,后面也别学了,就记住这一章就行了哈哈哈哈

另外这个可选可不选,意思就是要不要定期把GitHub上的文件改动跟VSCode本地更新

十、国内远程仓库——Gitee码云

可能还是有很多人不会“范强”,导致进不去GitHub,那这还有一个远程仓库叫Gitee,也叫码云,就是国内的远程仓库,直接百度搜索,进去注册登录,这里就不做演示

还是跟GitHub一样,配置ssh公钥,打开公钥文件把内容复制Gitee公钥那配置成功,然后再按照前面讲的【克隆远程仓库到本地】或【关联本地仓库和远程仓库】,成功就可以随意git push、git poll了

十一、还有一个叫GitLab的

不仅可以创建远程仓库,还可以部署自己的私人服务器,但是太过于麻烦,而且目前我们的目的不是学习怎么搭建服务器,那么就先不学了,以后我学了会回来更新文章,还请各位先收藏点赞

标签: git

本文转载自: https://blog.csdn.net/m0_73991249/article/details/136188929
版权归原作者 岑梓铭 所有, 如有侵权,请联系我们删除。

“Git一篇文章搞定”的评论:

还没有评论