Git 的认识及使用 | 青训营笔记

105 阅读7分钟

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

课程导学链接

(【网络与部署 学习资料(下)】第三届字节跳动青训营 - 后端专场 - 掘金)

课程PPT链接

(Git 的正确使用姿势与最佳实践)

一、Git的基本认识:

Git:是一个免费和开源的分布式版本控制系统,旨在以速度和效率处理从小型到大型项目的所有内容。

版本控制:一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统 (更好的关注变更,了解到每个版本的改动是什么,方便对改动的代码进行检查,预防事故的发生;也能够随时切换到不同的版本,回滚误删误改的问题代码)

image-20220607181634828.png

二、Git的基本原理:

1.每个库都存有完整的提交历史,可以直接在本地进行代码提交

2.每次提交记录的都是完整的文件快照,而不是记录增量

3.通过Push等操作来完成和远端代码的同步

三、Git基本操作

image-20220528170843861.png

创建本地空仓库:git init

init:初始化当前目录为仓库,初始化后会自动将当前仓库设置为master

init其他参数:

--initial-branch 初始化的分支

--bare 创建一个裸仓库(纯Git目录,没有工作目录)

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

mkdir test //创建目录
cd test    //进入目录
git init   //初始化当前仓库

初始化后会生成git的配置文件目录,普通的"ls"命令是看不到的,我们需要使用ls -ah查看隐藏目录

配置git环境:git config --global

初次使用git需要设置你的用户名以及邮箱,这将作为当前机器git的标识,如果你用它来下载远程仓库一些需要登录权限的仓库会要求登录,git默认使用配置邮箱以及用户名登入,但会要求你手动输入密码

git config --global user.name "你的用户名" //用户名配置
git config --global user.email "你的邮箱"  //邮箱配置

新建文件添加到本地仓库:git add、git commit

add:将文件添加到缓存区

如果你不确信哪些文件是改动过的,使用git add --all

commit:提交到本地仓库

commit其他参数:

-m 简写描述我们的信息

--amend 重写上一次的提交信息

touch test.c //新建一个文件
git add test.c //添加到本地仓库的提交缓存
git commit -m "add new file \"test.c\""//提交到本地仓库

git commit 会为我们生成40位的哈希值,用于作为id,并把刚刚用git add添加到提交缓存区里的文件提交到本地仓库中,便于我们回滚,至此,这个文件就已经添加到本地仓库中了,同时本地仓库也迭代了一个版本。

查看历史提交日志:git log

有三种模式

-soft就仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。

-mixed,就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的。

--hard,那么一切就全都恢复了,头变,aad的暂存区消失,代码什么的也恢复到以前状态。

git log  //查看历史版本
git reset --hard 要回滚id //回滚

查看提交之后文件是否做了改动: git status

status:查看当前仓库状态

使用git add提交到缓存区文件后,使用git status也可以查看到当前文件的状态

A:未修改

AM:修改

Untracked:未提交

modified:新文件,但未提交

如果提交了的文件,且没有改动的,不会显示到这个里面

将文件撤销回到最近一次修改的状态:git checkout -- file

查看提交历史:git reflog

git reflog可以查看当前版本库的提交历史,凡是对仓库版本进行迭代的都会出现在这个里面,包括你回滚版本都会出现在这个历史中

git 基本组成框架:Workspace、Index / Stage、Repository、Remote

Workspace:开发者工作区,也就是你当前写代码的目录,它一般保持的是最新仓库代码。

Index / Stage:缓存区,最早叫Stage,现在新版本已经改成index,位于.git目录中,它用来存放临时动作,比如我们做了git add或者git rm,都是把文件提交到缓存区,这是可以撤销的,然后在通过git commit将缓存区的内容提交到本地仓库

Repository:仓库区,是仓库代码,你所有的提交都在这里,git会保存好每一个历史版本,存放在仓库区,它可以是服务端的也可以是本地的,因为在分布式中,任何人都可以是主仓库。

Remote:远程仓库,只能是别的电脑上的仓库,即服务器仓库。

git rm后恢复文件:git rm、git reset、git checkout

git rm d.c //删除一个文件
git reset //重置所有缓存区操作
git checkout d.c //将文件取消操作

git创建分支:git branch、git checkout

git checkout -b 文件名 //创建一个分支,创建完成分支后会自动切换过去
git branch //查看当前属于哪个分支,也就是查看HEAD的指向

git切换分支:git checkout 文件名

git合并分支:git merge

git checkout master //切换到master
git merge 分支名 //合并分支

git查看分支:git branch -a //查看当前所有分支

git修改分支名称:git branch 分支名 新的分支名

git删除本地分支:git branch -D 分支名

git删除远程分支:git push origin --delete 远程分支名

github将本地仓库关联到远程仓库:git remote add origin

git remote -v //查看remote
git remote add origin_ssh git@github.com:git/git.git //关联
或 git remote add origin_http https://github.com/git/git.git
git push -u origin master //推送到远程

push:将本地仓库与远程仓库合并 -u:将本地仓库分支与远程仓库分支一起合并,就是说将master的分支也提交上去,这样你就可以在远程仓库上看到你在本地仓库的master中创建了多少分支,不加这个参数只将当前的master与远程的合并,没有分支的历史记录,也不能切换分支 origin:远程仓库的意思,如果这个仓库是远程的那么必须使用这个选项 master:提交本地matser分支仓库

git将远程仓库关联到本地和拉取指定分支、切换远程分支:git clone

git保存当前工作切换分支:git stash

git删除不需要的object:git gc

git gc --prune=now //指定的是修剪多久以前的对象,默认是两周前

gc 可以删除一些不需要的object,以及会对object进行一些打包压缩来减少仓库的提体积

四、常见问题

为什么我明明配置了Git配置,但是依然没有办法拉取代码?

  • 免密认证没有配。
  • Instead Of配置没有配,配的SSH免密配置,但是使用的还是HTTP协议访问。

为什么我Fetch了远端分支,但是我看本地当前的分支历史还是没有变化?

  • Fetch 会把代码拉取到本地的远端分支,但是并不会合并到当前分支,所以当前分支历史没有变化。

五、小结

通过课上的学习大致上了解git的基本工作原理,以及如何使用git。在短短的2个小时课程里不可能完全掌握git,在懂一些基础之后,需要不断的尝试,不断发现问题并努力的解决问题,才会慢慢变得深刻,学习git有着非常重要的作用,能够让我们对GitHub更好的使用,以及为之后的企业实习打下良好的基础。

参考文献

关于Git这一篇就够了