Git教程
2022-02-08 16:39:38 1 举报
AI智能生成
Git教程
作者其他创作
大纲/内容
Git简介
Git的诞生
Linus花了两周时间自己用C写了一个分布式版本控制系统
集中式VS分布式
集中式
版本库是集中存放在中央服务器
毛病就是必须联网才能工作
分布式
每个人的电脑上都是一个完整的版本库
安装Git
创建版本库
初始化一个Git仓库
使用git init 命令
添加文件到Git仓库
使用命令git add <file>
使用命令git commit -m <message>,完成
时光机穿梭
版本回退
使用命令git reset --hard commit_id, 在版本的历史之间穿梭
HEAD指向的版本就是当前版本
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本
工作区和暂存区
工作区(Working Directory)
电脑里能看到的目录
版本库(Repository)
暂存区(Stage)
git add命令实际上就是把要提交的所有修改放到暂存区
分支
git commit就可以一次性把暂存区的所有修改提交到分支
管理修改
Git跟踪并管理的是修改,而非文件
eg.
第一次修改 -> git add -> 第二次修改 -> git commit
仅提交了第一次的修改内容
第一次修改 -> git add -> 第二次修改 -> git add -> git commit
提交所有2次修改内容
撤销修改
工作区
命令git checkout -- file
暂存区
命令git reset HEAD <file>
提交到分支(未推送远程库)
命令git reset --hard commit_id
删除文件
工作区删除
分支删除
命令git rm删掉,并且git commit
远程仓库
添加远程库
从远程库克隆
分支管理
创建与合并分支
查看分支
git branch
创建分支
git branch <name>
切换分支
git checkout <name>或者git switch <name>
创建+切换分支
git checkout -b <name>或者git switch -c <name>
合并某分支到当前分支
git merge <name>
删除分支
git branch -d <name>
Git 指针操作分支
主分支master
新建分支dev
dev分支提交
把dev合并到master
解决冲突
当Git无法自动合并分支时,就必须首先解决冲突,再提交
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
用git log --graph命令可以看到分支合并图
分支管理策略
Fast forward模式
合并分支时,Git会用
删除分支后,会丢掉分支信息
禁用Fast forward模式
git merge --no-ff -m "merge with no-ff" dev
分支策略
master分支应该是非常稳定的,也就是仅用来发布新版本
dev分支是不稳定的,到版本发布时,再把dev分支合并到master上
小伙伴们每个人都在dev_xxx分支上干活,时不时地往dev分支上合并
Bug分支
修复bug时,创建新的bug分支进行修复,然后合并master,最后删除
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令
Feature分支
开发一个新feature,最好新建一个分支
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除
多人协作
推送分支git push origin dev
选择性推送分支
master分支是主分支,因此要时刻与远程同步
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步
bug分支只用于在本地修复bug,就没必要推到远程了
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发
抓取分支git pull
多人协作的工作模式
首先,可以试图用git push origin <branch-name>推送自己的修改
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并
如果合并有冲突,则解决冲突,并在本地提交
没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功
建立本地分支和远程分支的关联
使用git branch --set-upstream branch-name origin/branch-name
Rebase
把分叉的提交历史“整理”成一条直线,看上去更直观
缺点是本地的分叉提交已经被修改过了
标签管理
创建标签
命令git tag <tagname>用于新建一个标签,默认为HEAD
命令git tag -a <tagname> -m "blablabla..."可以指定标签信息
命令git tag可以查看所有标签
命令git show <tagname>可以看到说明文字
操作标签
命令git tag -d v0.1,删除本地标签
命令git push origin <tagname>可以推送一个本地标签
命令git push origin --tags可以推送全部未推送过的本地标签
命令git push origin :refs/tags/<tagname>可以删除一个远程标签
公共远程仓库
GitHub
Gitee
自定义Git
忽略特殊文件
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去
忽略文件的原则
忽略操作系统自动生成的文件,比如缩略图等
忽略编译生成的中间文件、可执行文件等
忽略你自己的带有敏感信息的配置文件
eg.
配置别名
配置Git的时候,加上--global是针对当前用户起作用的
如果不加,那只针对当前的仓库起作用
配置文件放哪了?
每个仓库的Git配置文件都放在.git/config文件中
命令git config --global alias.st status
搭建Git服务器
使用SourceTree
0 条评论
下一页