Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种:
本地仓库:开发人员自己电脑上的Git 仓库*
远程仓库:远程服务器上的Git仓库
当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。 在Git命令行中执行下面命令: 设置用户信息
git config --global user.name “用户名” git config --global user.email "用户邮箱" git config --list 查看配置信息创建本地空仓库(一般在任意路径下创建一个文件夹,进入文件夹后鼠标右击选Open Git Bash here)
git init // init 命令:初始化当前目录为仓库。git 的工作区域和文件状态
git 的本地处理分为三个区域 1: 工作区 2: 暂存区 3: 本地仓库
工作区 : 本地的工作目录,就是本地仓库,就是有.git的文件夹(即有,git文件夹的目录才算是一个git目录,也即是一个git工作区)
暂存区:用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息,一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index);
本地仓库:git目录就是本地仓库,里面保存着我们git commit 提交的东西,就是git的版本库
git 的文件状态分为:1: 未跟踪 2: 未修改 3: 已修改 4: 已暂存
未跟踪: 就是我新创建的文件,没有被git管理起来的文件
未修改: 就是被git管理起来 但没有做出任何修改
已修改: 就是被修改过了,但是没有被放到暂存区
已暂存: 就是我们修改之后已经被添加到暂存区的文件
下面演示一下怎样将文件创建到仓库中,也将学习到各种命令
git status //该命令: 看一下我们目前仓库的状态 vim test.txt //用vim编辑器创建一个文件 git status //这时我们在看一下仓库的状态 就发现这时有一个未跟踪的文件 git add test.txt // 使用该命令将test.txt文件放到暂存区里 git commit -m "提交提示信息" // 将文件交到仓库中保管(如果没有 -m参数的话 会自动将跳到vim的编辑器上,让我们在编写提示信息) git log --oneline// 查看我们提交记录 --oneline参数就是我们方便查看记录 这里还有个知识点 就是通配符。比如: git add *.txt(表示将所以以.txt结尾的文件放到暂存区中) git add .(将未被跟踪的文件全部放到暂存区中(也就是当前文件夹下所有文件添加到缓存区中)) git ls-files (查看暂仓库中文件的命令) git rm file (删除文件file在仓库中,暂存区,工作区中 )
当commit的内容有错误,需要回撤到之前的某个版本时 这是要用git reset命令
reset命令中参数区别如下:git reset --hard ()
区别 –hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。 –soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。 –mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。 使用场景 –hard:(1)放弃本地的所有改变,即去掉所有add到暂存区的文件和工作区的文件;(2) 抛弃目标节点(head)后的所有commit(之后所有的commit都不对)。 –soft:合并差异不大的commit,使整个演进线图更清晰。 –mixed(默认):(1)与2类似,合并相似的commit;(2)移除暂存区中的内容。(3)commit提交某些错误代码,不想再修改错误再commit(因为会留下一个错误commit点),可以回退到正确的commit点上,然后所有原节点和reset节点之间差异会返回工作目录,假如有个没必要的文件的话就可以直接删除了,再commit上去就OK了。
.gitignore忽略文件
在工程中,并不是所有文件都需要保存到版本库中的。在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件或目录。如果我们将文件已经提交到了本地仓库那么就不能将该文件放到.gitignore文件中
echo hellp > test.log echo test.log > .gitignore git status 当我们查看状态时,就只显示.gitignore该文件wei跟踪
.gitignore 的文件的匹配规则
git SSH配置和克隆仓库
首先进入文件夹.ssh 然后输入ssh-keygen -t rsa -b 4096 生成ssh密钥,然后回车,如果第一次配置密钥,接下来直接输入回车,然后输入密码。如果是配置过的,则需要输入新的文件名比如名为test这是为了防止覆盖掉原来的id_rsa默认生成的文件,文件后缀名.pub为公钥文件,没有后缀则是私钥文件。这时我们会发现.ssh文件夹下有test.pub和test文件,到这一不就可以复制.pub中的公钥内容,去github中设置了。如果是修改过默认的文件名的话,还需要去config文件去配置 在config中 我们将 Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/ .ssh/test
将这四句话配置到config文件中
关联本地仓库和远程仓库
git remote add origin git@github.com:(代码仓库路径) 命令意思: 添加一个远程仓库,origin是远程仓库的别名,一般默认的就是这个 git remote -v 查看当前仓库所对应的远程仓库的别名和地址 git branch -M main 指定分支的名称为main 现在默认为master git push -u <远程仓库名> <远程分支名>:<本地分支名>将我们本地的master分支和远程仓库origin的master分支关联起来 gti pull <远程仓库名> <远程分支名>:<本地分支名> 也可以省略<远程仓库名> <远程分支名>:<本地分支名>表示拉取远程仓库名origin和分支master,作用是把远程仓库的指定分支拉取到本地在合并
小注意 :在实行push和pull命令时,如果有的参数省略了 说明用的名称是默认的仓库名origin和分支名:master
Pull:可以看作在远程仓库修改文件后然后执行git pull (远程仓库名) (远程仓库分支):(本地仓库分支)命令然后在本地仓库中也会显示修改内容
Push: 可以看作我们在关联远程仓库的本地仓库中修改文件 执行该命令时远程仓库会显示修改的文件
git 分支管理 (一个项目中分为一个主分支和多个其他分支,当多个开发人员进行开发时,首先再其他的分支上进行测试,开发,知道成功了,就将该分支合并到主分支上)
查看仓库中所有的分支: git branch
创建分支命令: git branch (分支名称)
切换不同的分支命令: git switch (分支名称)
合并分支的命令: git merge (被合并分支名称) 就是比如我们这里有两个分支分别为 main分支和dev分支 我们向将dev分支合并到main分支上,首先我们先切换到main分支上,然后再main分支上执行 git merge dev的命令
删除分支命令: gti branch -D (分支名称) 表示强制删除
github 用的就是git系统来管理它们的网站,这里需要区分一下,github和git是两个东西,github是一个社区,git是一个服务系统,github只支持git分布式系统,所以故名成为github。