目录
前言
上篇博客我们已经通过图形化操作简单了解了git与github的使用,其中我推荐使用github desktop ,省力稳定还直观。
本地创建仓库(初始化)
上一节内容中我们最开始是在github中新建了一个仓库,然后把他克隆到本地之后,在本地修改编辑最后push到远程的,但是一般的开发我们肯定是喜欢先在本地建立好文件夹,然后再去修改内容推送到远程仓库,这样才比较符合我们用户的使用习惯。
注意 ,虽说在本地建立仓库之后还是得要在github网页中建立一个远程仓库与之对应,但是可以省去一步从远程仓库克隆到本地的操作。反正我个人是挺喜欢先在本地建立好一个大致的框架然后add、commit、push什么的。
因此这回以本地建立仓库为起点进行介绍。
在当前目录右键git bash here 打开命令行
git init创建本地仓库
初始化完成之后就会出现.git文件夹
添加文件,编写内容
在仓库初始化好后建立一个文件,添加内容,对应实际开发中的代码
git status查看状态
建立好之后,选择使用git status命令查看文件状态
发现刚刚建立的文件并没有被git追踪管理,提示使用git add提交到暂存区
git add
git add 文件名.后缀名
使用上面这条命令来将文件提交到暂存区
git commit
git commit -m 提交信息,对应一个版本
使用上面的命令将暂存区提交到本地仓库
创建远程仓库
本地仓库有了,现在得要有个远程仓库来对应本地仓库,否则Push都无的放矢。
刚刚搜了一下,无法通过git bash 来在远程建立仓库,就连github desktop也不行,可能毕竟设置一个仓库还是有许多配置和安全性上的考虑吧。所以我们还得在远程建立一个对应本地的仓库,我建议是和本地仓库保持同名,以免混乱。
建立好远程仓库之后,我在本地而不是通过命令行的方式,把原来叫做git命令行操作.md的文件删掉了,转而添加了一个文件README.md,这样比较符合习惯,但是当我用git status的时候出现了一个问题
git rm --cached 将文件的删除操作添加到暂存区
这是因为我直接删掉本地的文件,Git会显示这个文件为“Changes not staged for commit”,意味着它检测到了删除操作,但还没有添加到暂存区。如果你在本地删除了一个文件,但之后又希望Git跟踪这个删除操作就要用git rm --cached [文件名]命令将文件的删除操作添加到暂存区。这个命令会从暂存区中删除文件,但不会从你的工作目录中删除它。由于你已经从工作目录中删除了文件,这个命令实际上会告诉Git你想要删除这个文件,并准备提交这个更改。
执行完这个命令之后再查看git status,显示正常了
所以我们日常删除文件还是通过命令行来操作(这样慎重一点)或者删除之后再add(这样方便一点)
git rm 从你工作目录删除文件,并将其添加到暂存区,准备提交
git rm [文件名]
接下来,使用git commit命令来提交这个删除操作即可
注意git rm 和 git rm --cached的区别
- git rm --cached
命令本身不会从你的本地文件系统中删除文件。这个命令的目的是告诉Git,你想要删除这个文件,并且这个删除操作应该被记录在Git的暂存区中,准备在下一次提交时反映出来。
这里是git rm --cached命令的作用:
它从Git的暂存区(staging area)中删除文件,而不是从你的工作目录(working directory)中删除。
如果文件已经被你在本地删除了,使用git rm --cached [文件名]会告诉Git,这个文件已经被删除,并且这个删除操作应该被包括在下一次提交中。
- git rm [文件名]命令会执行以下操作:
从工作目录中删除文件:这个命令会从你的本地文件系统中删除指定的文件。
从暂存区中删除文件:同时,这个命令也会将文件从Git的暂存区中删除,这样Git就不会再跟踪这个文件了。
执行这个命令后,当你运行git status时,Git 不会再提示该文件为未追踪(untracked)或未暂存的更改(unstaged changes),因为这个文件已经被完全从Git的跟踪列表中移除了。
然后我又建立了一个新文档,并且add进了暂存区
使用git rm的时候又报错了
因为
error: the following file has changes staged in the index:
新建文本文档.txt
(use --cached to keep the file, or -f to force removal)
这意味着我尝试删除的文件 新建文本文档.txt 在Git的暂存区(index)中已经有更改被暂存了。这通常发生在以下几种情况:
- 之前对文件做了修改,并使用了 git add [文件名] 将这些更改添加到了暂存区。
- 或者,文件已经被删除,但使用 git add [文件名] 将删除操作暂存了。
Git不允许直接删除一个已经被暂存更改的文件,因为这可能会导致版本控制的状态混乱。你要先解决这些暂存的更改,然后再删除文件。
这里有几种方法来解决这个问题:
使用 --cached 选项
如果你想要删除文件,但保留文件在工作目录中,可以使用 --cached 选项。这会从暂存区中删除文件,但不会影响工作目录中的文件:
git rm --cached [文件名]
使用 --force 或 -f 选项
如果你确定要删除文件,并且不介意丢失任何暂存的更改,可以使用 --force 或 -f 选项强制删除文件:
git rm -f [文件名]
这会从工作目录和暂存区中删除文件。
另外
如果你之前已经使用 git rm [文件名] 将文件的删除操作暂存了,但你现在改变主意不想删除文件,可以使用以下命令撤销这个暂存的删除:
git reset HEAD [文件名]
然后,你可以将文件重新添加到暂存区:
git push
修改完成之后可以推送到远程仓库了
以下几种方式
第一种 git push 仓库地址名称 分支名称
git push https://github.com/Levangogo/GitBash.git main
注意现在github网站上创立仓库的时候建立的默认分支叫main了,而不是master,据说是因为政治原因。
所以这里要注意用main
第二种 git remote add 远程仓库别名 远程仓库地址
在之前的Push操作中,需要把仓库的地址给复制进来,比较麻烦,使用git remote add的方式可以给远程仓库取个别名
git remote add origin https://github.com/Levangogo/GitBash.git
这样以后就可以使用别名指代仓库地址名了
经过add和commit操作之后,就可以push了
git push origin main
远程协作开发之git pull
如果甲上传了代码之后邀请乙进行协同开发,乙在推送代码到仓库后,甲可以通过git pull命令拉取仓库分支的最新版本
git pull 仓库地址 分支名
而且拉取操作是读操作,不需要输入密码。
git pull和git clone的区别
git clone是完全克隆远程仓库,是在没有本地仓库的前提下进行的,只需要第一次加入项目开发的时候用一次就好了,后续就不用了
在后续中如果要拉取远程仓库的代码只需要pull就好了
注:如果本地仓库的版本比远程仓库的版本低的话,需要先从远程仓库pull最新版本修改之后才能push提交代码。
SSH免登录
一般来说使用github常常需要使用账户密码,但是windows10系统自动保存了下来,而使用SSH就可以免登录。有兴趣的同志可以看一下这个视频,其中RSA非多称加密算法是基于费马大定理,有关于数论的知识,非常有趣。
git忽略清单
建立一个.gitignore文件,在里面写上需要忽略的文件或者文件夹就可以了,之后就可以把其他所有的文件和文件夹统一add进暂存区 通过 git add .
这个命令