git的命令行操作 | 青训营笔记

168 阅读3分钟

git命令行基本操作

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记

开始一个git仓库

git init 初始化一个空的Git仓库

--initial-branch 不使用默认master分支

--bare 创建一个裸仓库 一般服务器上的仓库由此创建

--template 可以通过模板创建构建好的自定义git目录

tree .git 查看目录分支结构

  • windows的git bash默认无tree命令

    解决办法

  • 一个实际项目中的文件树

image.png

  1. HEAD 表示当前指向的分支

  2. config 当前仓库的配置 system--global--local 低级别的配置覆盖高级别的配置

  3. hooks 配置一些hook 会有一些.sample例子,但不会执行,可参照.sample进行编写或者删去后缀执行

  4. objects 存储一些文件信息

  5. 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命令上传到不同的仓库中 image.png

git push origin master #上传到gitee的master分支中
git push github main   #上传到github的main分支中

但是要确保git到的远程仓库分支名称与本地仓库的分支名相同,否则就会出现下面的这种,push到远程新建了一个分支的情况,还需要进行pr或者切换分支

image.png

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

一些常见的英文单词

  1. Branch 分支,用于开发阶段,可以不断添加Commit进行迭代
  2. Tag 标签,稳定版本
  3. 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

这样就完成了一次修改历史版本的操作