Git | 青训营笔记

58 阅读3分钟

day4

Git

为什么学习Git:

协同工作 业界绝大多数公司都是基于Git进行代码管理,因此Git是一个程序员的必备技能

Git是什么:

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

版本控制是什么?

一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统

为什么需要版本控制

更好的关注变更,了解到每个版本的改动是什么,方便对改动的代码进行检查,预防事故发生;也能够随时切换到不同的版本,回滚误删误改的问题代码;

基本原理:

1.每个库都存有完整的提交历史,可以直接在本地进行代码提交 2.每次提交记录的都是完整的文件快照,而不是记录增量 3.通过Push等操作来完成和远端代码的同步

优点:

  1. 分布式开发,每个库都是完整的提交历史,支持本地提交,强调个体
  2. 分支管理功能强大,方便团队合作,多人协同开发
  3. 校验和机制保证完整性,一般只添加数据,很少执行删除操作,不容易导致代码丢失

缺点:

学习成本高,大文件不友好

git常用命令:

项目初始化:

git init

其他参数:

--initial-branch 初始化的分支

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

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

常见git配置:

#用户名配置
git config --global user.name "liaoxingju"
git config -- global user.email  "liaoxingju@bytedance.com"
#Instead of 配置:
git config --global url.git@github.com:.insteadOf  https://github.com/
#别名配置
git config --global alias.cin "commit --amend --no-edit'

Git Remote:

#查看remote
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 add
git commit

Git Clone & Pull & Fetch

Clone

拉取完整的仓库到本地目录,可以指定分支,深度。

Fetch

将远端某些分支最新代码拉取到本地,不会执行merge操作,会修改refs/remote内的分支信息,如果需要和本地代码合并需要手动操作。

Pull

拉取远端某分支,并和本地代码进行合并,操作等同于git fetch + git merge, 也可以通过git pull --rebase完成git fetch + git rebase操作。 可能存在冲突,需要解决冲突。

Git Push

一般用 git push origin master即可完成

冲突问题

1.如果本地的 commit记录和远端的commit历史不一致,则会产生冲突,比如git commit --amend or git rebase都有可能导致这个问题。

2.如果该分支就自己一个人使用, 或者团队内确认过可以修改历史则可以通过git push origin master - f 来完成强制推送,一般不推荐主干分支进行该操作,正常都应该解决冲突后再进行推送。

推送规则限制 可以通过保护分支,来配置一些保护规则, 防止误操作, 或者一些不合规的操作出现, 导致代码丢失。

常见问题

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

免密认证没有配。

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

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

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

总结:

主要学习了要版本控制的原因,还有一些git的常用命令。它虽然只是一个工具,但也要和练习代码一样练习练习,操作操作以便之后可以更好的使用