#技术笔记
1. Git是一个版本控制工具,可以记录、追踪某个文件在某一时刻的内容和状态,主流的管理工具有Git、SVN,Git分布式 版本控制工具,可以在离线状态下提交、查看日志、创建分支等,需要同步时再 push/pull 到远程仓库;SVN是集中式版本控制工具,开发者需要联网才能提交、查看日志、比较版本等,本地只保留一个工作副本。如下图。

2. Git核心流程

3. 在不同Git仓库注册时一定要记住,账号、密码、邮箱,因为后续会用到,比如私有仓库克隆的时候就要用,不记得一般看URL上的内容。
4. Git命令
git clone 下载远程仓库的内容,并在本路径创建一个和远程仓库同名的文件夹,然后建议配个公私钥(SSH Key),这样在git push/pull/clone 就不用每次输入密码了。(理解克隆就是进行多人开发了,每个人有一条自己的本地仓库,随便改)
git status 可以查看工作区和暂存区/缓冲区和本地仓库的变化。
git add 可以把工作区的内容提交到暂存区。git add . <-这个命令是全部提交,注意add后面有个点;git add 指定的文件名,这个文件把指定的文件推到暂存区;git add *.c 这个通配符* 可以匹配所有以**.c**结尾的文件。
git commit 这个可以把缓冲区/暂存区的内容提交到本地仓库,是一次性上传全部暂存区的内容,建议加上 -m 参数,例如 git commit -m "备注" , 这样可以不用编辑文件了,直接用git commit 会进入一个配置好的编辑器(可以自己配置)。
git log 这个可以列出所有版本的详细信息(每次 git commit就会有一个版本出来),版本号是哈希算法生成的,40为16进制的数,可以直接用短版本号(就是用前7位,没冲突就行);一般可以用 git log --oneline 来查看防止过长,还可以用 git log --oneline --all --graph 有个小图可以参考。
5.分支问题
5.1 查看分支
git branch -a 可以查看所有分支,有些远程的别的开发者的也看得见。
git branch 就是查看当前分支,也就是本地的。
5.2 git branch 分支名 <-这就是创建分支
5.3 切换分支
git checkout 分支名
git checkout -b 分支名
git switch 分支名 <-现在用的,因为git checkout功能太多和复杂,也可以用checkout
5.4 删除分支
git branch -d 分支名
git branch -D 分支名 <-小d是安全删除,可能删不掉,删不掉就用D强制删除,但删不掉你所在的分支。
5.5 合并分支
git merge 分支名 <-这个用来合并两个分支的内容的,要注意合并分支应该向下游版本合并,上游的理解就是老的版本号哪些合并新的正在开发的下游;还有合并产生了无法自动合并的冲突就要手动处理冲突了,也就是猛猛改代码了。合并完的分支如果不想要就可以删了。
6. 冲突问题
冲突大多时候是几个开发者对同一文件发生了修改(也就是多人合作提交到远程仓库)或者两个分支修改了同一文件中的相邻部分内容。冲突约定俗称的规矩,先push的人不处理冲突,后push的人要处理冲突,准备提交代码的时候最好pull一下,这样要push提交的时候不容易出错。
**7.**提交和更新,用git push 和 git pull。在合作开发中,多个用户基于远程仓库的代码合并本质上就是类似冲突处理问题。
push命令 就是把本地仓库的版本变化推到远程仓库,git push 把本地当前所在的分支的版本变化推送到跟踪/关联的远程分支; git push origin 分支名 把本地当前所在的分支的版本变化推送到显示指明的远程分支上;
8. 回退问题
git reset 相当于git reset --mixed HEAD
git reset --soft 版本号 //将本地仓库的提交和本地仓库回退到暂存区,但暂存区和工作区没变化
git reset --hard 版本号 // 将本地仓库、暂存区、工作区的内容恢复 (毁灭性最强)
git reset --mixed 版本号 // 将本地仓库和暂存区回退到工作区,工作区的内容没有变化
soft 动仓库,mixed 动暂存,hard 动工作区
9.忽略文件
git下有一个**.gitignore**文件,可以起到过滤的效果,例如把不需要的什么.o;.s等文件过滤了,这样就不会追踪和不会提交。
10.本地项目提交
主要涉及关联远程仓库和提交到远程仓库这两步最重要。
- git add -u //添加所有已经跟踪文件的变更(包括删除,移动)
最后有个Git分支的学习网站推荐一下: https://learngitbranching.js.org/?locale=zh_CN