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等操作来完成和远端代码的同步
优点:
- 分布式开发,每个库都是完整的提交历史,支持本地提交,强调个体
- 分支管理功能强大,方便团队合作,多人协同开发
- 校验和机制保证完整性,一般只添加数据,很少执行删除操作,不容易导致代码丢失
缺点:
学习成本高,大文件不友好
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的常用命令。它虽然只是一个工具,但也要和练习代码一样练习练习,操作操作以便之后可以更好的使用