文章目录
个人使用的话通过git bash进行就行了。http的方式就基本够用了。如下的点击 Open Git Bash here。
前言.git的作用
使版本好管理方便修改,可以实现分布式管理
分布式管理
每个人都有一个副本,随时查阅。工作可以在本地进行,中央处理器出现了问题也不用担心。当需要共享的时候,中央处理器进行共享就可以了。git目前就是最先进的分布式管理系统。
一、git创建
每个文件的添加修改删除都可以被Git跟踪到,以便任何时候都可以追踪历史还原到之前的某一个版本。
仓库的创建
一种是在自己电脑的本地直接创建一个仓库,一种是在远程的服务器上克隆一个仓库。
1.git init 的创建的方式
mkdir learn-git 创建learn-git这个文件夹
cd learn-git 进入learn-git文件夹
git init 初始化一个空的仓库
ls //显示不了隐藏的文件
ls -a //显示所有的文件
main代表了所在分支的,表示当前的目录已经是一个被git管理的仓库。
ls -altr 命令将以长格式、反向(即最旧的在前面)和按修改时间排序的方式列出当前目录中的所有文件和目录,包括隐藏文件。
显示的都是git的重要的内容,不能够忽略。
1.git clone 的创建的方式
将服务器的一个仓库直接复制过来。
需要使用的部分
二、git工作区域和文件状态
分为工作区,暂存区,本地仓库
工作区就是你在电脑上能看见的目录。
暂存区就是一个中间的区域用于存放临时提交修改的内容。
本地仓库就是git init命令创建的那个仓库。包含了完整的项目历史和元数据。是git存储代码和版本信息的重要位置。
当你修改过工作区的文件之后,需要先提交到暂存区然后提交到本地仓库
三、git 添加和提交文件
分为了这几种情况,未跟踪,未修改,已修改,已暂存。
git init my-repo //创建我自己的repo文件。
1.将文件添加到仓库里面
1.常见的命令
git init //创建仓库
git status //查看仓库的状态
git add //添加到暂存区
git commit //提交
进入my-repo输入git status可以看到当前分支的情况。
No commits yet 代表还没有提交,
我们可以看到自己分支是master而不是main这是由于git的版本导致的,影响不大。
echo回显的方式,这里用的git-bash不太行。
我们用vim file1.txt的方式。创建这个file1.txt里面的内容为“这是第一个文件”的.txt文件。
使用git add 将文件添加到暂存区
提交之后file1.txt的状态被改变了。而且得到一个提示
Changes to be committed: //去改变提交可以使用这样的命令。
(use “git rm --cached …” to unstage)
之后就会用到下一个命令就是git commit //提交的命令。
我们的文件只有被提交到仓库中才算真正的被保管里起来。
需要注意的地方:
git commit这个命令只会提交暂存区中的文件。
新创建一个file2.txt再git status //查看仓库的状态,可以看到file2.txt是一个未跟踪的状态。
当不给git status指定参数的时候,其会进入一个交互式的界面。使用vim的方式编辑该界面。
使用vim的方式编辑该界面,就可以进行提交。使用git log查看提交记录。
可以看到自己提交的名称,邮箱与时间等。
2.查看简洁的提交信息
git log --oneline //查看简洁的提交信息。
对文件添加m这个参数,来指定提交的信息。这个信息会被记录到仓库之中。指定时候可以看到刚刚的绿色的file1.txt已经不见了,如下,因为file1.txt已经被提交到仓库中保管了起来。
git 在提交的时候只会提交暂存区中的文件而不会提交工作区中的其他文件。比如说现在的file2就是没有在暂存区所以提交的时候也不会将file2提交上去。
2.使用通配符的方式提交多个文件
使用vim的方式创建多个文件,
可以看到除了file1.txt已经被仓库保存起来,其他的都没有。
使用 git add *.txt将所有以txt结尾的文件全部添加到暂存处当中。
可以看到文件的状态变为了绿色。
除了通配符之外git add还接受文件夹作为命令。
3.提交仓库部分的命令
git add //添加一个文件到仓库
git add . //添加所有文件到仓库,这里的.代表当前目录。
git commit -m “message” //提交暂存区所有的文件到仓库。
git commit -am “message” //提交所有已修改的文件到仓库。
git add . //添加所有文件如上
四、git回退版本
1.常见的命令
git reset //用于回退版本,后面可以跟三个参数。
git reset --soft //sof代表回退到某一个版本,并且保留工作区和暂存区的所有的修改内容。
git reset --hard //丢弃工作区和暂存区的所有的修改内容。
git reset --mixed //保留工作区的修改内容,丢弃暂存区的所有的修改内容。
mined也是reset命令的默认的参数。
三者的主要的区别在于重新提交之前,混合模式需要执行一下get add操作来将变动的内容重新添加到暂存区之中,soft不需要,因为暂存区没有被清空。hard一般被用来你真的要放弃本地的所有的修改的时候,
建议谨慎使用hard这个参数hard,因为其会删除这两个版本之间的工作区和暂存区的所有的修改的内容。
误操作可以使用git reflog //命令来查看我们操作的历史记录。找到误操作之前的版本号,再用git reset命令来回退到这个版本就可以。
经过三次提交之后回退版本。前面的信息就是版本的ID,
先复制三个不同的版本。
回退后,信息放生了改变。HEAD指针也指向了第二个版本。
cat file3.txt //查看file3的文件的内容
git ls-files //查看暂存区的内容
建议谨慎使用hard这个参数
五、git diff查看差异
1.常见的命令
git diff //查看工作区与缓存区的差异
git diff HEAD //比较工作区和版本库之间的差异
git diff --cached //用于显示暂存区(staging area)和上一次提交之间的差异
git diff //查看两个提交之间的差异
查看工作区,暂存区,本地仓库之间的差异。它会显示发生更改的文件以及更改的详细信息。
能够通过该命令看到修改的内容
git会将文件的内容使用哈希算法生成一个40位的哈希值。index e69de29…bfbfab6 100644 //就是这个部分,这里只显示了哈希值的前7位。100644代表文件的权限红色的代表修改的内容,绿色代表修改结束后的内容。
将工作区的内容提交到暂存区之后,没有了任何内容说明,工作区和暂存区的内容是一致的。
还可以比较工作区和版本库之间的差异。git diff HEAD //命令
因为还没有执行提交的操作,所以还能看见差异,工作区和版本库的内容是不相同的。
git diff --cached //用于显示暂存区(staging area)和上一次提交之间的差异
可以看到输出的内容和之前是相同的,
git commit -m “commit4” 中的commit4是你为这次提交指定的消息。它应该简洁地描述这次提交的主要更改内容。写其他的也都可以。git commit -m用于将暂存区的更改(通过 git add 命令添加的)提交到当前分支的本地仓库中,m参数后面用来跟一个信息。
提交了之后再看发现没有了差异信息,表示了我们的工作区和暂存区和本地的仓库是一致的。
git diff //查看两个提交之间的差异
后面跟提交的ID。
还可以用HEAD来表示当前的最新的提交。指向分支的最新提交节点。
我们也可以使用HEAD~ 来表示上一个版本。HEAD~ 2表示提交之前的两个版本。还可以加上文件名就只会查看该文件的差异内容,git diff HEAD~3 HEAD file3.txt
2.git diff部分总结
六、git rm删除文件
rm file1.txt //删除file1.txt这个文件
git rm file2.txt //删除file2.txt这个文件,从工作区和暂存区。
最后要记得提交一下,否则其在版本中还是存在的。
七、git ignore忽略文件
应该忽略的文件的类型。
.gitignore 文件生效有一个前提,就是这个文件不能是已经被添加到版本库中的文件。
1.gitignore的匹配规则
github上有常见的忽略的模版。
八、github使用
列出了Branchs分支和Tags
分为HTTPS的方式和SSH的方式
HTTPS的方式连接的时候需要验证用户名和密码
SSH的方式不需要验证,但是需要在github上添加SSH公钥的配置
直接克隆,可以发现报错了,这是由于我们还没有配置SSH的密钥导致的。
ssh-keygen -t rsa -b 4096 //-t代表指定协议为RSA,-b代表指定生成的大小为4096
cd进入根目录,然后进入.ssh。这里提示需要输入秘钥的文件名称。如果是第一次使用这个命令的话直接回车就行了,它会在我们的用户根目录下生成一个id_rsa的秘钥文件。我的密码设置123456.
但是如果之前已经配置过SSH密钥的话,就不能直接回车,此时的回车会直接覆盖掉我们之前的文件。而且这个操作是不可逆的。
没有任何文件后缀的就是私钥文件(不要轻易的泄露),而有.pub结尾的文件就是公钥文件。
如果使用test的方式指定了新的文件名,还需要进一步增加配置。
tail -5 config //需要创建一个config的文件。
#添加的config文件的内容
.# github
Host github.com
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/test**
本地的仓库和远程的仓库是相互独立的,本地的修改不会影响到远程的仓库。
1.添加远程仓库和拉取本地仓库
九、gitee使用
与github基本相同。
1.结合VScode的使用
十、分支简介和基本操作
都可以在开发,不必影响其他功能的开发与使用。
分支的优点就是提高工作的效率,减少冲突和错误的影响。
上面是文件名,下面是提交记录。
1.总结与基本操作
2.合并分支与解决冲突
十、回退和rebase
两个分支像两个溪流一样汇聚到了一起。
alias //重命名一个命令。
rebase和Merge有什么区别,该如何区分使用呢?
Merge
优点:不会破坏原分支的提交记录,方便回溯和查看。
缺点:会产生额外的提交节点,分支图比较复杂。
Rebase
优点:不会新增额外的提交记录,形成线性的历史,比较直观和干净。
缺点:会改变提交历史,改变了当前分支branch out的节点。避免在共享分支中使用。
所以一般不会在公共的分支上执行rebase操作。
1.分支管理和工作流模型
常见的工作流模型示意图。
1.GitHub Flow模型
总结
对git的常见的使用做了一个学习。