Git的配置和使用命令
前言:版本管理一直是很多人忽视的,自从我学习以来,我一直就认为版本管理是软件开发过程中的一个重要环节,它能够帮助开发人员对特定功能的集合或特定代码构建结果进行管理。通过有效的版本管理,可以确保编码阶段的顺利推进、保证产品功能和质量尽可能地符合预期,并帮助团队积极地应对需求变更,并及时应对版本问题,从而制定有针对性的版本优化。然而很多人往往视版本管理如草芥,认为代码只要能按预期进行改善就不需要这么”繁琐”的东西,这是事实上是一种“无售后保证”的思维——尽管产品已经结束开发阶段,进入维护阶段乃至消亡阶段,但是我们仍能通过版本管理工具获得完整的版本变更记录,从而得到有迹可循的开发历史,这不失为一种脚踏实地做开发的行为体现,而且也能杜绝一些开发团队中存在的”小毛病“,从心理上规范开发流程。因此,我们要正确对待版本管理,并好好利用现有的强大工具——Git,来学习这门技术!这也是我一直长期更新学习中遇到的Git问题并记录下来的原因。
——01Petard/伪音花火/Pseudnuos
简单汇总
一、安装和配置
1. 官网下载安装
2. 配置基本信息
1 | git config --global user.name "username" |
查看配置信息
1 | cat ~/.gitconfig |
1 | git config --list |
3. 配置ssh key
1 | ssh-keygen -t rsa -C "email@qq.com" |
我创建过了就不创建了,之后需要创建一个访问这个密钥的密码,需要牢记。
这个密钥之后要放在github里的,所以这个文件不要误删了。
可以使用命令来查看一下
1 | cat ~/.ssh/id_rsa.pub |
*补充一下,如果后期觉得push总是要输密码太麻烦,可以修改密码为空
4. 将ssh key添加到github上
4.1 点击Settings
4.2 点击New SSH key
4.3 添加key
4.5 验证链接
1 | ssh -T git@github.com |
输入创建ssh key时的密码,如果打印以下信息则表示成功!
二、本地仓库操作
1. 创建仓库
1.1 创建一个Github仓库
1.2 创建一个本地仓库
1 | git init |
回到本地,新建一个测试文件夹,里面放点文件,写点东西
1.3 创建一个忽略的文件列表
1 | touch .gitignore |
常见忽略文件,可以按需添加
1 | .DS_Store |
使用touch和vim创建好.gitignore文件
2. 文件提交
2.1 显示当前目录下的提交文件状态
1 | git status |
这是还没提交时的状态
这是已经提交的状态
2.2 添加工作区的文件到暂存区
1 | git add [文件] |
2.3 删除暂存区的文件
1 | git rm --cached [文件] |
2.4 创建提交
1 | git commit -m "[提交信息]" |
2.5 删除提交
1 | 暂存区有文件时无法运行 |
x
:显示交互的HEAD引用记录条数
git rebase -i
命令参数解释:
pick
: 提交这个版本。drop
: 删除这个版本。
除此之外还有参数,比如reword
、edit
、squash、
、fixup
、exec
,但是都不常用,不做解释。
2.6 显示未推送的提交
1 | git log origin/main..main |
比较远程的origin/main和本地的main分支,下同
1 | git log --graph origin/main..main |
2.7 显示分支的提交历史
1 | git log |
2.8 显示仓库的引用历史
1 | git reflog |
git reflog
命令用于显示当前仓库的引用日志。引用日志记录了所有对 HEAD 指针的更新操作,包括提交、分支切换、重置等。每次更新操作都会在引用日志中生成一条新记录。
使用 git reflog
命令可以帮助你查看当前仓库的历史操作记录,以便在出现问题时进行故障排除和恢复。例如,如果你不小心删除了一个分支,你可以使用 git reflog
命令查找该分支最后一次提交的 SHA 值,然后使用该 SHA 值重新创建分支。
3. 分支操作
3.1 查看所有分支
1 | git branch |
当前只有一个master分支,如果之前配置好了默认分支名为main,这里因该是main
3.2 重命名分支
1 | git branch -m [分支原名] [分支新名] |
我们回去再看,main分支名字已经改好了
3.3 创建分支、切换分支
创建分支
1 | git branch [分支名] |
切换分支
1 | git checkout [分支名] |
可以看到现在在issue1分支下了
创建并切换到分支
1 | git checkout -b [分支名] |
创建分支并切换到此分支下,也可以这么做,更快捷
4. 合并分支
4.1 合并两个分支的最新提交到新的分支
1 | git checkout -b [分支名] |
1 | git merge [分支1] [分支2] |
merge选定的分支,会合并两个分支的最新提交
4.2 合并两个分支的某个提交到新的分支
1 | git checkout [分支名] |
1 | git cherry-pick <issue1-commit-sha> |
4.3 合并某个分支上的提交到选定的分支
1 | git checkout [分支名] |
1 | git cherry-pick <issue-commit-sha> |
5. 文件回滚
回滚十分重要,这也是版本管理的初衷——保证文件的可管理性。回滚在错误还原、情景复现等场景中十分重要,救我好几次了!
5.1 对比:git checkout和git reset
git checkout | git reset | |
---|---|---|
作用 | 恢复文件、切换分支(切换前暂存区不能有文件) | 恢复文件 |
影响1 | 只会更新工作区中的文件,不会影响暂存区和当前分支 | 会更新暂存区和工作区中的文件 |
影响2 | 不会影响未提交更改 | 会丢弃所有未提交的更改 |
5.2 切换版本文件
1 | git checkout HEAD/HEAD~n/<issue-commit-sha> [文件]/. |
回滚某些文件到上一次的版本
回滚所有文件到上一次的版本
5.3 重置版本文件
1 | git reset --hard/--soft/--mixed HEAD/HEAD~n/<issue-commit-sha> [文件]/. |
--hard
:重置HEAD、暂存区和工作区,丢弃所有未提交更改。简单粗暴的版本回滚办法,尽管现有的工作量会白费,但是错误也不会产生了。
--soft
:重置HEAD。不影响暂存区和工作区。会回滚到某个版本,但是之前所作的工作会保留下来。比如你在某分支下做了一些工作,然后当你切换到另一个分支时,希望可以将原来的工作成果继承过来,就可以使用这个命令。又比如你提交了几次,但是觉得目前的工作还没有完成,就可以使用这个方法”撤销提交“,回到某个版本并将之前的工作量保留下来。
--mixed
:重置HEAD和暂存区。不影响工作区。和soft相比,mixed会更严格。如果你不想保留暂存区已经添加的文件,可以用mixed;如果你”心软“,就可以用soft,但是在整体提交的时候不要忘了解决冲突。
如果你重置版本的时候已经”心无挂念“了,谁爱提交就提交去吧,就可以用mixed。
版本重置成功!
三、远程仓库操作
1. 修改远程仓库地址
1 | git remote rm origin # 删除 |
1 | git remote add origin https://github.com/用户名/仓库名 # 添加 |
2. 拉取合并远程仓库的文件
1 | git pull origin main |
3. 将本地分支推送到远程主机的分支上
1 | git push (--force) origin (--delete) main:main # 远程主机名 本地分支名:远程分支名(相同可不写) |
四、文件对比
1. 查看当前未提交的版本的改动
1 | git diff (HEAD~0) (HEAD~1) |
红色的是上一版本的,绿色是当前修改后的,减号表示删除的内容,加号表示新增的内容
2. 对比两个版本的区别
1 | git diff <issue1-commit-sha> <issue2-commit-sha> |
会分别展示两个版本的区别,但是写得很乱,我都看不懂。
而且这两个版本相隔太久,差别很大,在这里无法真正体现出区别。