Git的正确使用姿势与最佳实践|青训营笔记

185 阅读4分钟

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

为什么要学习git

协同工作:绝大多数公司都是基于Git进行代码管理。

开源社区:绝大多数的开源项目都是基于Git维护的。

01Git是什么

1.1版本控制

版本控制:一种记录一个或者若干个文件内容变化,以便将查阅特定版本修订情况

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

三种版本控制

image.png

1.1.1本地版本控制

最初方式

通过本地复制文件夹,来完成版本控制,一般可以通过不同的文件名来区分版本

解决方案

开发了一些本地版本控制软件,如RCS

基本原理

本地保存所有变更的补丁集,可以理解成就是所有Diff,通过补丁,我们可以计算出每一个版本的实际文件内容

缺点

只能本地使用,无法进行团队协作,使用场景有限

1.1.2集中版本控制

代表性工具SVN

基本原理

提供一个远端服务来保持文件,所有用户将文件提交到该服务器中

增量保存每次提交的Diff,如果提交的增量中和远端现存文件有冲突,则需要本地提前解决

优点

学习简单,容易操作

支持二进制文件,对大文件支持更友好

缺点

本地不储存版本管理的概念,所有提交都只能连接上服务器后才能提交

分支上的支持不够友好,对于大型项目团队合作比较困难

用户本地不保存所有版本代码,如果服务端故障,可能容易导致历史版本的丢失

1.1.3分布式版本控制

Git

基本原理

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

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

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

优点

分布式开发,每个库都是完整的提交历史,支持本地提交,强调个体

分支管理功能强大,方便团队合作,多人协同开发

校验和机制保证完整性,一般只添加数据,很少执行删除操作,不容易丢失代码

缺点

相对于SVN更复杂,学习成本更高

对于大文件的支持不是特别的好(git-lfs工具可以弥补这个功能)

Git常用命令总结

1.添加和删除文件

添加指定文件到暂存区

git add [file1] [file2] ...

添加指定目录到暂存区,包括子目录

git add [dir]

添加当前目录的所有文件到暂存区

git add .

添加每个变化前,都会要求确认 对于同一个文件的多处变化,可以实现分次提交

git add -p

删除工作区文件,并且将这次删除放入暂存区

git rm [file1] [file2] ...

停止追踪指定文件,但该文件会保留在工作区

git rm --cached [file]

改名文件,并且将这个改名放入暂存区

git mv [file-original] [file-renamed]

2.代码提交

提交暂存区到仓库区

git commit -m [message]

提交暂存区的指定文件到仓库区

git commit [file1] [file2] ... -m [message]

提交工作区自上次commit之后的变化,直接到仓库区

git commit -a

提交时显示所有diff信息

git commit -v

使用一次新的commit,替代上一次提交

如果代码没有任何新变化,则用来改写上一次commit的提交信息

git commit --amend -m [message]

重做上一次commit,并包括指定文件的新变化

git commit --amend [file1] [file2] ...

3.分支

列出所有本地分支

git branch

列出所有远程分支

git branch -r

列出所有本地分支和远程分支

git branch -a

新建一个分支,但依然停留在当前分支

git branch [branch-name]

新建一个分支,并切换到该分支

git checkout -b [branch]

新建一个分支,指向指定commit

git branch [branch] [commit]

新建一个分支,与指定的远程分支建立追踪关系

git branch --track [branch] [remote-branch]

切换到指定分支,并更新工作区

git checkout [branch-name]

切换到上一个分支

git checkout -

建立追踪关系,在现有分支与指定的远程分支之间

git branch --set-upstream [branch] [remote-branch]

合并指定分支到当前分支

git merge [branch]

选择一个commit,合并进当前分支

git cherry-pick [commit]

删除分支

git branch -d [branch-name]

删除远程分支 git push origin --delete [branch-name]

git branch -dr [remote/branch]