git_0">1. git安装
git下载
有Linux,Mac,Windows三种版本用于下载
我们这里以Windows为例
1.1 安装exe
安装目录最好别有中文
建议选择vim编辑器
后面直接无脑点next即可
1.2 检验安装是否完备
安装完毕之后,目前比较新的版本的git都会自动将git的环境变量添加好
我们Win+r启动cmd(最好用管理员打开)
输入sh,回车
说明安装成功!
如果出现sh不是内部命令之类的,就需要我们手动给git配置环境变量
变量值为git安装目录(bin目录的上一级)
然后编辑Path系统变量,添加%GIT_HOME%\bin
最后保存退出即可
git_39">2. git日常使用(最基础和最频繁的操作)
在命令行输入sh和右键git bash here的区别在于,有一些命令属于linux,sh毕竟是windows的命令行,是无法使用的
在一个全英文的目录下新建文件夹:myFIrstGit
gitgit_bash_here_46">2.1 第一种git命令行:右键git bash here
这里可以使用ll -a这个Linux系统的命令,展示当前文件夹的所有内容
也可以使用windows的
gitsh_54">2.2 第二种git命令行:路径中输入sh
在这里输入sh,回车
两个界面几乎完全一致,但是这里无法使用ll -a
2.3 初始化(创建版本库)
git init
作用:将所在文件夹初始化为git本地仓库;之后将会生成.git文件夹,其中包含了本地仓库添加提交推送记录,本地仓库的用户名和邮箱,分支详情等信息
我们查看.git文件夹的内容,包含这些内容
其中config文件是用来存放本仓库的配置的
包含远程仓库的地址,本地仓库的用户名,邮箱等信息
COMMIT_EDITMSG保存了提交时附带的备注信息
2.4 添加文件+修改文件(基于Linux命令)
vi 文件名.拓展名
第一次进入默认阅读模式,点击i切换为编辑模式
esc退出编辑模式,然后输入:wq保存并退出
保存退出之后默认回到命令行界面
2.5 添加+提交修改的变动到本地仓库
2.5.1 添加文件到暂存区
git add .
或者git add firstGit.txt
前者是添加当前所有文件到暂存区;后者是只添加指定的文件到暂存区
2.5.2 提交变动至本地仓库
使用git status
查看当前目录的文件变动状态
我们可以发现新建了一个文件,并且已经被添加到了暂存区
随后使用git commit -m "提交的备注"
将暂存区中的文件提交到本地仓库
2.6 将提交到本地仓库的变动推送到远程仓库
推送之前需要先连接,连接分为两种方式:https模式和ssh模式;
两者具体的过程大致相同,区别在于https需要验证一次账号密码,ssh则是需要保存ssh秘钥
githubgitee_117">2.6.1 创建github远端仓库和gitee远端仓库
创建好之后是这样
然后创建gitee的仓库
2.6.2 与远端仓库建立连接
2.6.2.1 https方式建立连接
-
复制仓库的https的clone的联接
-
回到本地的git命令行,添加本地remote,命名为origin
使用git remote
查看本地所有的rermote(远端仓库地址)
3. 添加本仓库的user.mail以及user.name
git config --local user.name 'username'
git config --local user.mail 'mail'
- 推送到远端仓库
git push -u origin master # 这里的-u是--set-upstream的简称,--set-upstream用于设置上游分支(将本地仓库的分支与远端仓库的分支建立固定的联系,只有第一次需要这么做,后续推送代码可以直接git push)
git push # 本地分支和远端分支建立联系之后可以省略多余参数
然后就会弹出输入账号密码的会话框
授权一次即可永久使用(创建了windows凭据)
随后代码即可正常推送到远端仓库
ssh秘钥的方式稍微复杂一点
2.6.2.2 ssh方式建立连接
在 Windows 的 GitBash 或 Linux 终端输入:
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
此命令将提示您用于存储密钥对和密码的位置和文件名。当提示输入位置和文件名时,只需按Enter键即可使用默认值。
或者直接
ssh-keygen
你可以把引号里的替换为你自己的邮箱
然后终端会让你输入一些东西,可以不用输入直接一路回车,看到一个像雪花一样的图案之后就说明成功了
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:t3925EJgD4kcUp69dBv/nqkM85n0I5mFRW4BlZwaVeo your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
| .=o=|
| . . B |
| o + * .|
| . * =oo+ |
| So.B +A+ |
| .o.B.o.o|
| .o o+o.|
| .*+B.*|
| .OoBo|
+----[SHA256]-----+
linux:cat .ssh/id_rsa.pub 查看公钥
windows:在C盘下 .ssh 文件夹中会生成 id_rsa 和 id_rsa.pub 两个文件, id_rsa.pub是公钥文件
打开公钥文件并复制到github或者gitee的ssh秘钥配置中
2.6.2.3 测试ssh连接
ssh -T git@github.com
或者
在这里插入代码片
然后会提示测试连接成功
随后我们就可以在clone代码的时候选择ssh方式clone
并且第一次push代码时也不需要输入账号密码进行验证
2.6.3 推送代码
之前我们已经将变动提交到暂存区了,当我们将远端仓库和本地仓库建立连接之后,就可以推送代码了
git push origin master
3. 其他重要命令
3.1 查看提交记录历史
git log
回车可以向下继续查看,包含了项目的所有提交记录
:wq 保存退出
3.2 版本回退&&版本回退
git reset --hard HEAD^ # 退回上一个版本
git reset --hard HEAD~100 # 退回上100个版本
# 通过sha1的前四位退回到指定版本
git reset --hard xxxx
但是如果我又不想退回这个版本了,我想撤销回退,应该怎么做
git reflog # 查看所有历史版本
然后就又可以切回最新的版本
3.3 查看&修改配置信息
git config --local -l # 查看本地仓库级别配置
git config --global -l# 查看用户级别仓库配置
git config --system -l# 查看系统级别仓库配置
优先级:仓库级别 > 用户级别 > 系统级别
git 仓库级别对应的配置文件是当前仓库下的.git/config
git 用户级别对应的配置文件是用户宿主目录下的~/.gitconfig
git系统级别对应的配置文件是git安装目录下的 /etc/gitconfig
修改配置:
git config --级别 user.name ""
git config --级别 user.email ""
级别可以是:local,global,system
gitignore_306">3.4 .gitignore自动忽略添加文件
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式,匹配规则如下:
- “*”:星号匹配零个或多个任意字符
- []:匹配任何一个列在方括号中的字符,如[ab]匹配a或者匹配b
- “?”:问号匹配一个任意字符
- [n-m]:匹配所有在这两个字符范围内的字符,如[0-9]表示匹配所有0到9的数字
匹配示例
logs/: 忽略当前路径下的logs目录,包含logs下的所有子目录和文件
/logs.txt: 忽略根目录下的logs.txt文件
*.class: 忽略所有后缀为.class的文件
!/classes/a.class:不忽略classes目录下的a.class文件
tmp/*.txt: 只忽略tmp目录下的.txt文件
**/foo: 可以忽略/foo, a/foo, a/b/foo等
3.5 创建分支/切换分支/查看分支/删除分支
git_init_325">3.5.1 默认分支master并不是git init之后自动创建
当我们初始化仓库之后,本地仓库默认没有分支
HEAD是指向当前的分支,当前在哪个分支就指向哪个分支
分支指针指向提交
所以没有提交,也就没有分支,HEAD指针没地方指!
因为git仓库的HEAD指针要指向某一个提交分支的commit版本(默认该分支的最新提交版本),
所以只有提交了代码,才能真正创建默认的master分支
结果为空
当我们首次提交了代码之后
我们再查看分支,出现了master分支!
3.5.2 创建分支/切换分支/查看分支
切换分支需要先提交变动,或者暂存变动,才可以切换分支
git branch devlop # 创建本地分支devlop
git switch devlop # 切换到devlop分支上
git checkout -b devlop # 先创建,然后切换到devlop分支上
git branch # 查看自己所在的分支
git beanch -av # 查看本地和远程的所有分支,并且显示每个分支最新提交的备注
git remote # 查看当前本地分支推送对应的远端分支是哪个
3.5.3 删除分支
- 不能删除自己所在的分支
- 如果一个分支发生了变化不能删除
git branch -d devlop
3.6 分支合并
git pull = git fetch +git merge
合并到A分支,就再A分支上运行:
git merge B
3.6 暂存变动
我们发现会提示错误,git建议我们先提交或者stash修改的内容再切换
我们执行git stash
会先把修改的内容做保存然后我们就可以切换到其他的分支
我们再切回master分支执行,我们能看到上次保存的操作
git stash list
我们可以将stash过的修改恢复出来。通过pop取出最近的恢复并且删除stash中的修改
git stash pop
如果两次pop由于提一次没有做提交则会报错,所以我们应该把第一次pop的提交,再pop第二次暂存代码继续开发
3.7 删除远程分支
git push origin --delete feature
git_416">4. git流程示意图(包含内存结构图)
注意:随着Git 2.23版本的发布,checkout的功能被拆分成了两个新的命令:switch和restore。
git switch:专门用于切换分支和创建新分支。它简化了分支管理的流程,使得用户更容易理解。
git restore:用于恢复工作目录和暂存区的文件,但不涉及分支的切换。
这一变化反映了Git社区对命令清晰性和易用性的追求。尽管checkout命令仍然可用(出于向后兼容的考虑),但推荐使用新的switch和restore命令。