git命令行基本操作
这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记
开始一个git仓库
git init 初始化一个空的Git仓库
--initial-branch 不使用默认master分支
--bare 创建一个裸仓库 一般服务器上的仓库由此创建
--template 可以通过模板创建构建好的自定义git目录
tree .git 查看目录分支结构
-
windows的git bash默认无tree命令
-
一个实际项目中的文件树
-
HEAD 表示当前指向的分支
-
config 当前仓库的配置 system--global--local 低级别的配置覆盖高级别的配置
-
hooks 配置一些hook 会有一些.sample例子,但不会执行,可参照.sample进行编写或者删去后缀执行
-
objects 存储一些文件信息
-
refs 存储一些分支信息
常见Git配置:
用户名、邮箱配置
git config --global user.name "XXX"
git config --global user.email XXX
Instead of配置 url替换,将ssh协议替换为http协议
git config --global url.git@github.com:.insteadOf https://github.com
Git命令别名配置 简化某些命令
git config --global alias.cin "commit --amend --no-edit"
Remote配置 本地和远端仓库的关联信息 http和ssh两种
git remote -v #查看 默认为空
本质上是修改config文件,直接vimconfig文件删除remote相关行也可以修改
通过配置不同的源连接到不同的平台
git remote add origin_ssh git@github.com:git/git.git #添加ssh源
git remote add origin_http https://github.com/git/git.git #添加http源
为同一个origin设置不同的Push和Fetch URL来从其他开源库中拉去代码push到自己的开源库中
git remote -h 帮助命令
git remote set-url --add --push origin git@github.com:my_repo/git.git
通过课程的讲解以及自己对于git的实际操作,可以为同一个项目创建多个remote配置,并通过git push命令上传到不同的仓库中
git push origin master #上传到gitee的master分支中
git push github main #上传到github的main分支中
但是要确保git到的远程仓库分支名称与本地仓库的分支名相同,否则就会出现下面的这种,push到远程新建了一个分支的情况,还需要进行pr或者切换分支
Git Add
将文件添加到暂存区 gitbash的命令与linux相同,touch新建文件,可用vim编辑
git status #查看是否有未提交的文件
git add . #将文件添加到目录中
本地保存的文件都是加密的,可以通过命令进行查看内容
哈希值为objects文件夹名称+文件名
git cat-file -p 3b18e512dba79e4c8300dd08aeb37f8e728b8dad
Git Commit
gitcommit时可以添加一些注释说明本次commit的具体工作
合适的注释可以更好的进行版本管理,同时可以清晰的看到代码更新的内容以及工作树
git commit -m "add readme.md"
查看更改历史
git log
历史版本管理
refs
一些常见的英文单词
- Branch 分支,用于开发阶段,可以不断添加Commit进行迭代
- Tag 标签,稳定版本
- Annotation Tag 附注标签
因此ref是指针 指向当前ref对应的版本
一些命令可以帮助更好的理解ref
-
/refs/heads 下出现test目录
git checkout -b test
- /refs/tags 下出现v0.0.1目录
git tag v0.0.1
-
/refs/tags 下出现v0.0.1目录
并且出现 tag object
git tag -a v0.0.2 -m "add feature 1"
修改历史版本
修改后,原commit变成了悬空object 即没有ref指向的object
commit --amend
git fsck --lost-found
reflog记录操作日志,手动将日志设置为过期
git reflog expire --expire==now --all
指定修剪多久之前的对象,默认两周前
将object打包,将refs打包成packed-refs
git gc --prune==now
拉取完整仓库 拉取最新代码 拉取远端分支并合并本地代码
filter --branch
git clone/fetch/pull
将本地代码同步至远端
git push
这样就完成了一次修改历史版本的操作